У меня есть пользовательское устройство ввода и встроенная система, и я должен преобразовать ввод в соответствующие события в Qt.В моем текущем представлении у меня есть QListView и некоторые QPushButtons.Я использую следующий код в своем виджете.
QKeyEvent * e = NULL;
if (cmd.up.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, 0, 0);
else if (cmd.down.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, 0, 0);
else if (cmd.left.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, 0, 0);
else if (cmd.right.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, 0, 0);
else if (cmd.ok.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Space, 0, 0);
if (e)
QApplication::postEvent(this->focusWidget(), e);
Я могу перемещаться вверх / вниз / вправо / влево между списком и кнопками, но я не могу нажимать кнопки.Я также пытался использовать Qt :: Key_Enter и Qt :: Key_Return, но ни один из них не работает.
Если запустить приложение на моем компьютере, нажатие клавиши «пробел» или нажатие левой кнопки мыши на клавиатуре приводит к нажатию кнопки.Это означает, что где-то , событие изменяется на то, что кнопке нравится больше, чем прямое получение Qt :: Key_Space, верно?
У кого-нибудь есть идея, как мне решить эту проблему?Я могу проверить, какая кнопка (если есть) имеет фокус, и щелкнуть ее вручную, но это не очень элегантное кодирование ...