QT Embedded: как сгенерировать событие для ESC (Escape), F1 и таких клавиш - PullRequest
1 голос
/ 20 августа 2010

Я работаю над встроенным программным обеспечением в 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 активного окна. Остальные (ВЫХОД, КРАСНЫЙ) не ...

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 января 2011

Использование текущего сфокусированного виджета в postEvent решает проблему.У меня были некоторые проблемы в конфигурации LIRC, которая генерировала некоторые "не те" коды клавиш.Если кому-то понадобится помощь в этом, я буду рад помочь.Спасибо

...