Qt 4.8.4 Встроенная Linux Ручка Кнопка питания Нажатие клавиши
У меня есть очень простое приложение для Linux на Qt 4.8.4, которое работает на ARM. В основном он имеет только EventFilter, установленный на уровне qApp. У меня на плате есть кнопка питания, которая при нажатии выдает код 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:
// Install the event filter
bool TestApp::eventFilter( QObject *obj, QEvent *ev ) {
qDebug() << ev->type();
Фильтр событий получает другие события касания и нажатия клавиш, но никогда не получает мощность (116). Итак, как мне заставить приложение Qt получать это событие от 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 поглощает событие Power Press, но после этого qwsFilter я вижу, что QWS вообще не получает события Power!
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"