Вопрос

Я создаю автоматическое тестовое приложение с помощью библиотеки 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);

Я должен сказать, что документация не ясна, но она работает для меня таким образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top