QTest - Невозможно передать Qt :: Enter в QPushButton - PullRequest
1 голос
/ 25 января 2011

Я создаю автоматизированное тестовое приложение с использованием библиотеки 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 :: Enter в форму, он должен также нажать кнопку «Сохранить». Однако, когда я пытаюсь передать нажатие клавиши:

QTest::keyPress(pWin, Qt::Key_Enter, 1000);

ничего не происходит ... как ты думаешь, что происходит? Я пытался установить функцию setFocus () для кнопки, но ничего не происходит ...

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Я думаю, вам нужно отправить событие ключа кнопке или строке редактирования вместо родительского окна.

QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);

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

1 голос
/ 25 января 2011

в QDialogButtonBox вы можете получить нужную кнопку с помощью

 QPushButton * QDialogButtonBox::button ( StandardButton which )

и затем вызовите его метод SetFocus. Если вы не можете получить доступ к QDialogButtonBox напрямую, вы можете получить его с помощью

QList<T> QObject::findChildren ( const QString & name = QString() )

или даже сами получайте кнопки этим методом ...

...