我有一个在ARM上运行的非常简单的Qt 4.8.4嵌入式Linux应用程序。它基本上只是在qApp级别安装了eventFilter。我的电路板上有一个电源按钮,按下后会发出'代码116(电源)'。
以下是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 ------------
每次按下按钮,我都会得到一些输出:
# cat platform-omap_i2c.1-platform-twl4030_pwrbutton-event
�#�Qwat�#�Qwa�#�QY= t�#�QY=
我使用'-qws'启动我的应用程序,我的eventFilter正在打印我的Qt App获得的每个事件:
// Install the event filter
bool TestApp::eventFilter( QObject *obj, QEvent *ev ) {
qDebug() << ev->type();
事件过滤器获取其他触摸和按键事件但从未获得(116)电源。那么如何让Qt App从Linux接收此事件?谢谢!
更新:
我还实现了一个过滤器,它将拦截并报告Qt QWS服务器收到的所有事件。这是我的头文件:
#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:
这是我的实施:
#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);
};
这是main.c:
#include <QApplication>
#include "filter.h"
int main(int argc, char *argv[])
{
Filter a(argc, argv);
return a.exec();
}
虽然可能QWS正在吞噬电源新闻事件,但在执行此qwsFilter之后,我发现QWS根本没有收到Power事件!
答案 0 :(得分:1)
实际上,将环境变量设置为正确的键盘输入可以捕获电源事件。
这样做:
export QWS_KEYBOARD=linuxinput:/dev/input/event2
而不是:
export QWS_KEYBOARD=linuxinput:/dev/input/keypad
允许我捕捉并使用电源按钮。
此外,您可以捕获多个输入:
export QWS_KEYBOARD="linuxinput:/dev/input/keypad linuxinput:/dev/input/event2"