Probabilmente questa domanda non è rilevante per il proprietario della domanda, ma suppongo che potrebbe essere utile per gli altri.
A differenza di QToolBar
, QMenu
non ha il metodo widgetForAction
. Ho trovato una soluzione semplice per questo caso. Prova il menu popup con QTest::mouseClick
se non succede nulla prova a usare QTest::keyClick(..., first_char_in_menu_tite, Qt::AltModifier)
. Per simulare l'esecuzione dell'azione, è possibile navigare con Qt::Key_Down
fino all'azione, quindi premere Qt::Key_Enter
. Suppongo che il seguente codice possa aiutarti a capire
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);
}
Cosa otterrebbe? Basta chiamare 'QAction :: trigger()'. – cmannett85
Sto provando a creare un'applicazione di test automatizzata per un'interfaccia utente. –
Questo è fondamentalmente quello che voglio fare anche io. Penso che la complicazione qui sia che QMenu non crea un widget per ogni QAction: le voci del menu sono praticamente disegnate direttamente nel rettangolo del menu. – fatuhoku