Wahrscheinlich ist diese Frage nicht relevant für Frage Besitzer, aber ich nehme an, es könnte für andere hilfreich sein.
Im Gegensatz zu QToolBar
hat QMenu
keine Methode widgetForAction
. Ich habe einen einfachen Workaround für diesen Fall gefunden. Versuchen Sie Popup-Menü mit QTest::mouseClick
, wenn nichts passiert, versuchen Sie QTest::keyClick(..., first_char_in_menu_tite, Qt::AltModifier)
zu verwenden. Um die Ausführung einer Aktion zu simulieren, können Sie mit Qt::Key_Down
bis zum Erreichen der Aktion navigieren und dann Qt::Key_Enter
drücken. Ich nehme an, dass folgender Code Ihnen helfen kann, zu verstehen
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);
}
Was würde das erreichen? Rufen Sie einfach 'QAction :: trigger()' auf. – cmannett85
Ich versuche eine automatisierte Test-App für eine Benutzeroberfläche zu erstellen. –
Das ist im Grunde, was ich auch tun möchte. Ich denke, die Komplikation hier ist, dass QMenu kein Widget für jede QAction erstellt: Die Menüpunkte werden so ziemlich direkt auf das Rechteck des Menüs gezeichnet. – fatuhoku