Возможно, этот вопрос не относится к владельцу вопроса, но я полагаю, он может быть полезен другим.
В отличие от 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);
}
Что бы это получилось? Просто вызовите 'QAction :: trigger()'. – cmannett85
Я пытаюсь сделать приложение для автоматического тестирования для пользовательского интерфейса. –
Это в основном то, что я хочу делать. Я считаю, что сложность здесь заключается в том, что QMenu не создает виджет для каждого QAction: элементы меню в значительной степени просто нарисованы непосредственно на прямоугольник меню. – fatuhoku