Я пытаюсь смоделировать щелчок мышью на элементе QMenu из QMenuBar, например, нажимая на QAction «Сохранить как» с помощью инфраструктуры QTestLib.
Я использую это под Windows XP 32 bit и Qt 5.0.2.
Есть идеи?
Возможно, этот вопрос не имеет отношения к владельцу вопроса, но я полагаю, что он может быть полезен для других.
В отличие от 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);
}
Вы должны использовать QTest :: Mouseclick функция. Он будет имитировать щелчок на любом QWidget. Я обнаружил, что попытка щелкнуть QMenu, который вызывает блокирующий вызов, не будет работать с модульным тестом.