Qtest - невозможно передать QT :: Enter to qpushbutton
-
24-10-2019 - |
Вопрос
Я создаю автоматическое тестовое приложение с помощью библиотеки QTest. Я могу моделировать нажатие клавиш на приложении, за исключением случаев, когда оно попадает в окно с Qdialogbuttonbox (сохранить и отменить). Вот мой пример кода:
std::auto_ptr<MainForm> myForm( new MainForm( 3, 3 ));
myForm->show();
QTest::keyPress(myForm.get(), Qt::Key_0, NULL, 1000);
QTest::keyRelease(myForm.get(), Qt::Key_0, NULL, 100);
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MyMainForm"));
Теперь, когда он попадает в следующее окно, в нем есть несколько элементов управления, где входной фокус находится на управлении редактированием текста. Когда я нажимаю Enter, он нажимает кнопку «Сохранить». Таким образом, теоретически, если я должен передать QT :: введите форму, она также должна нажать кнопку «Сохранить». Однако, когда я пытаюсь передать клавиш:
QTest::keyPress(pWin, Qt::Key_Enter, 1000);
ничего не происходит ... как вы думаете, что происходит? Я пробовал SetFocus () к кнопке, но ничего не происходит ...
Решение
В Qdialogbuttonbox вы можете получить необходимую кнопку с
QPushButton * QDialogButtonBox::button ( StandardButton which )
а затем назовите его метод SETFOCUS. Если вы не можете получить доступ к Qdialogbuttonbox напрямую, вы можете получить его с
QList<T> QObject::findChildren ( const QString & name = QString() )
Или даже получить кнопки с этим методом ...
Другие советы
Я думаю, что вам нужно отправить ключевое событие на кнопку или редактирование линии вместо родительского окна.
QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);
Я должен сказать, что документация не ясна, но она работает для меня таким образом.