Я работаю над встроенным программным обеспечением в QT, которое использует LIRC для обработки нажатий клавиш RC (Remote Control).
Мне удалось сопоставить все клавиши RC, поэтому directFB получает такие нажатия клавиш:
00000000000011b7 00 MENU
00000000000011a7 00 EXIT
0000000000001193 00 RED
Я создал класс QT, который использует сокеты для захвата ключей LIRC и генерации KeyPressEvents через QApplication :: postEvent для всех других виджетов QT и тому подобного.
Он отлично работает для «обычных» клавиш, но не работает для клавиш, которые имитируют ESC, F1, F2 и другие «специальные» клавиши.
Я мог бы заставить его работать, используя сигналы и слоты (отметьте это ниже), однако, это сложно, поскольку мне нужно постоянно подключать и отключать сигналы для активных окон (виджетов). Я отказываюсь верить, что лучшего решения для этого нет.
Кто-нибудь знает, как генерировать события для этих специальных ключей?
Следуя фрагменту кода метода обработчика сокета LIRC:
QKeyEvent *event = NULL;
int emitKey = 0;
if (strstr(code, "MENU"))
{
cout << "MENU";
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier, "Menu", 0);
emitKey = Qt::Key_Menu;
}
else if (strstr(code, "EXIT"))
{
cout << "EXIT";
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier, "Exit", 0);
emitKey = Qt::Key_Escape;
}
else if (strstr(code, "RED"))
{
cout << "RED";
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_F1, Qt::NoModifier, "Red", 0);
emitKey = Qt::Key_F1;
}
// All other keys, including ...
if (event)
{
cout << ": POSTED!" << endl;
event->ignore();
QApplication::postEvent(this, event);
emit k_output(emitKey);
}
Событие клавиши меню достигает метода keyEvent активного окна. Остальные (ВЫХОД, КРАСНЫЙ) не ...
Большое спасибо за вашу помощь.