Я работаю в проекте, где мне нужно автоматически открывать (показывать или всплывать) элементы в QMenuBar.
Допустим, у меня есть следующая строка меню:
File Edit Help
-op1 -op1 -op1
-op2 -op2 -op2
Чтобы установить действие (показать меню, связанное с этим действием), я использую:
menuBar->setActiveAction(mymenuactionpointer);
Насколько мне известно, я могу использовать одно из следующих действий, чтобы получить список указатели на элементы QMenuBar:
QMenuBar::actions();
или
QList
Когда я использую QMenuBar :: findChildren () или MenuBar :: actions () , я получаю список меню в строке меню, я имею в виду, что я получил «Файл, Правка, Справка» из моего QMenuBar, размер QList в данном случае равен 3.
Когда я использую QMenuBar: : findChildren () Я получил список QObject размером 6, который является правильным количеством элементов в строке меню. Однако я попытался применить приведение к QAction *
. Во всех этих случаях a не равно NULL, но когда я пытаюсь получить имя действия QAction :: title () , оно всегда вызывает у меня ошибку сегментации.
Я искал и обнаружил здесь , что после получения списка действий в строке меню можно запросить QAction :: menu () (который возвращает действительный указатель QMenu, если элемент является меню), чтобы узнать, является ли элемент QMenu, если да, можно повторить получение списка действий этого меню и продолжить итерацию.Но у меня это не работает, я ожидал, что для
QList lst2 = QMenuBar::findChildren();
каждый элемент «File, Edit Help» QAction :: menu () возвращает действительный указатель меню, так что я мог бы получить список действий каждого меню, но у меня это совсем не работает.
Я очень ценю ваше время и вашу помощь. Надеюсь, этот вопрос поможет большему количеству людей. Мне действительно тяжело с этим.