Qt QKeyEvent и QTest mouseClick () выдают одинаковую ошибку - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь реализовать навигацию по клавишам на очень простом интерфейсе с 4 кнопками. Команды клавиш на самом деле поступают от некоторого внешнего оборудования, которое работает правильно, генерируя функцию обратного вызова при нажатии. Из этой функции я хочу подключиться к пользовательскому интерфейсу, посылая QKeyEvents и щелчки мышью для перемещения фокуса между кнопками и щелкая их, чтобы вызвать их действия.

Пока что я могу поворачивать фокус вокруг кнопок с помощью:

QKeyEvent *eventPress = new QKeyEvent(QKeyEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QCoreApplication::postEvent(qApp -> focusWidget(), eventPress);
QKeyEvent *eventRelease = new QKeyEvent(QKeyEvent::KeyRelease, Qt::Key_Tab, Qt::NoModifier);
QCoreApplication::postEvent(qApp -> focusWidget(), eventRelease);

, но на самом деле не может нажать на сфокусированную кнопку, когда я заменяю Qt: KeyTab на Qt: Key_Space. Читая, что управляемое событие Qt: Key_Space имеет дополнительную утилиту, зависящую от того, куда оно идет и т. Д. Вместо этого я попытался внедрить симулированный щелчок мыши из QTest

QTest::mouseClick(qApp -> focusWidget(), Qt::LeftButton, Qt::NoModifier);

Однако, и событие Qt :: Key_Space, и имитированные методы mouseClick () приводят к этой ошибке:

QPainter::begin: A paint device can only be painted by one painter at a time.
QPainter::setCompositionMode: Painter not active
QWidget::repaint: Recursive repaint detected
2019-01-24 07:34:41 sigHandler: Unhandled signal 11, terminating

QMutex: destroying locked mutex

Все это отлично работает с реальной клавиатурой терминала с нажатиями табуляции и пробелами, и я был удивлен, обнаружив, что QTest mouseClick () также не работает, так как он должен имитировать использование пользовательского интерфейса. Но я, должно быть, делаю что-то не так или недостаточно понимаю - я относительный нубий из Qt.

Пожалуйста, некоторая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...