2013-06-05 3 views
0

J'ai une application Linux embarquée Qt ​​4.8.4 très simple qui fonctionne sur ARM. Il a simplement un eventFilter installé au niveau qApp. J'ai un bouton d'alimentation sur ma carte qui émet le code 116 (Power) 'quand on appuie dessus.Qt 4.8.4 Clé de bouton d'alimentation de la poignée Linux intégrée

est ici la sortie de evtest:

# ./evtest /dev/input/event2 
Input driver version is 1.0.1 
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0 
Input device name: "twl4030_pwrbutton" 
Supported events: 
    Event type 0 (Sync) 
    Event type 1 (Key) 
    Event code 116 (Power) 
Testing ... (interrupt to exit) 
Event: time 1370431888.296539, type 1 (Key), code 116 (Power), value 1 
Event: time 1370431888.296539, -------------- Report Sync ------------ 
Event: time 1370431888.453338, type 1 (Key), code 116 (Power), value 0 
Event: time 1370431888.453338, -------------- Report Sync ------------ 
Event: time 1370431890.855651, type 1 (Key), code 116 (Power), value 1 
Event: time 1370431890.855682, -------------- Report Sync ------------ 
Event: time 1370431891.026885, type 1 (Key), code 116 (Power), value 0 
Event: time 1370431891.026885, -------------- Report Sync ------------ 

Chaque fois que j'appuie sur le bouton, je reçois une sortie:

# cat platform-omap_i2c.1-platform-twl4030_pwrbutton-event 
�#�Qwat�#�Qwa�#�QY= t�#�QY= 

je lance mon application avec « -qws » et mon impression est eventFilter chaque événement que mon application Qt obtient:

// Install the event filter 
bool TestApp::eventFilter(QObject *obj, QEvent *ev) { 

    qDebug() << ev->type(); 

Le filtre d'événement obtient d'autres événements tactiles et de pression, mais jamais le (116) Puissance. Alors, comment puis-je obtenir l'App Qt pour recevoir cet événement de Linux? Merci!

MISE À JOUR:

J'ai également mis en place un filtre qui intercepte et signaler tous les événements que le serveur QWS Qt reçoit. Voici mon fichier d'en-tête:

#include <QApplication> 
#include <QDebug> 

/// The QWS embedded server for OS events 
#include <QWSServer> 

/// For investigation key events 
#include <QWSServer> 
#include <QWSMouseHandler> 
#include <QWSEvent> 

class Filter : public QApplication 
{ 
public: 

Voici mon implémentation:

#include "filter.h" 

bool Filter::qwsEventFilter(QWSEvent *e) 
{ 

    qDebug() << "NEW TYPE: " << e->type; 

} 

     Filter(int &argc, char **argv) : QApplication(argc, argv) {}; 

     bool qwsEventFilter(QWSEvent * event); 

    }; 

Et voici main.c:

#include <QApplication> 
#include "filter.h" 

int main(int argc, char *argv[]) 
{ 

    Filter a(argc, argv); 

    return a.exec(); 
} 

Je pensais que peut-être QWS a été engloutit la presse électrique événement, mais après avoir fait ce qwsFilter je vois que QWS ne reçoit pas du tout les événements de puissance!

Répondre

1

En fait, en réglant la variable d'environnement sur l'entrée correcte du clavier, je peux capturer l'événement d'alimentation.

Ce faisant ceci:

export QWS_KEYBOARD=linuxinput:/dev/input/event2 

Plutôt que ceci:

export QWS_KEYBOARD=linuxinput:/dev/input/keypad 

me permet de capturer et d'utiliser le bouton d'alimentation.

En outre, vous pouvez capturer plusieurs entrées comme ceci:

export QWS_KEYBOARD="linuxinput:/dev/input/keypad linuxinput:/dev/input/event2" 
Questions connexes