Тестирование Qt UI: Как смоделировать щелчок на элементе QMenuBar с помощью QTest?

Я пытаюсь смоделировать щелчок мышью на элементе QMenu из QMenuBar, например, нажимая на QAction «Сохранить как» с помощью инфраструктуры QTestLib.

Я использую это под Windows XP 32 bit и Qt 5.0.2.

Есть идеи?

9

Решение

Возможно, этот вопрос не имеет отношения к владельцу вопроса, но я полагаю, что он может быть полезен для других.

В отличие от QToolBar, QMenu не имеет метода widgetForAction, Я нашел простой обходной путь для этого случая. Попробуйте всплывающее меню с QTest::mouseClick если ничего не происходит, попробуйте использовать QTest::keyClick(..., first_char_in_menu_tite, Qt::AltModifier), Для имитации выполнения действия вы можете перемещаться с Qt::Key_Down к действию, пока вы не достигнете его, а затем нажмите Qt::Key_Enter, Я полагаю, следующий код может помочь вам понять

QMenu *menu = getMenu(mainWindow, menuName);
if (menu != nullptr) {
QTest::keyClick(mainWindow, menu->title().at(1).toLatin1(), Qt::AltModifier);
}QList<QAction *> actions = menu->actions();
foreach (QAction *action, actions) {
if (action->objectName() == actionName) {
QTest::keyClick(menu, Qt::Key_Enter);
break;
}
QTest::qWait(1000);
QTest::keyClick(menu, Qt::Key_Down);
}
7

Другие решения

Вы должны использовать QTest :: Mouseclick функция. Он будет имитировать щелчок на любом QWidget. Я обнаружил, что попытка щелкнуть QMenu, который вызывает блокирующий вызов, не будет работать с модульным тестом.

-1

По вопросам рекламы [email protected]