我试图使用QTestLib框架在QMenuBar上模拟鼠标单击QMenu项,例如单击"Save As" QAction。 我正在Windows XP 32位和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上进行单元测试将无法正常工作。
QAction::trigger()
。 - cmannett85