我正在一个项目中工作,我需要自动打开(显示或弹出)QMenuBar 中的项目。
假设我有下一个菜单栏:
File Edit Help
-op1 -op1 -op1
-op2 -op2 -op2
要设置一个动作(显示与该动作关联的菜单),我使用:
menuBar->setActiveAction(mymenuactionpointer);
据我所知,我可以使用以下方法之一来获取指向 QMenuBar 元素的指针列表:
QMenuBar::actions();
或者
QList<Object*> lst1 = QMenuBar::findChildren<QObject*>();
QList<Object*> lst2 = QMenuBar::findChildren<QAction*>();
当我使用QMenuBar::findChildren<QAction*>()
或MenuBar::actions()
获得菜单栏中的菜单列表时,我的意思是,我"File, Edit, Help"
从我的 QMenuBar 获得,在这种情况下 QList 的大小为 3。
当我使用时,QMenuBar::findChildren<QObject*>()
我得到了一个大小为 6 的 QObject 列表,这是菜单栏中正确的项目数。但是,我尝试过强制转换为 QAction*
QAction *a = (QAction *)lst1.at(0);
QAction *a = qobject_cast<QAction*>(lst1.at(0));
QAction *a = dynamic_cast<QAction*>(lst1.at(0));
在所有这些情况下a
都不是 NULL,但是当我尝试获取操作名称QAction::title()
时,它总是会导致我出现分段错误。
我一直在搜索,我在这里发现,在获取菜单栏操作列表后,可以询问QAction::menu()
(如果项目是菜单,则返回有效的 QMenu 指针)知道项目是否是 QMenu,如果是,可以重复获取该菜单的操作列表,并继续迭代。但这对我不起作用,我希望
QList<Object*> lst2 = QMenuBar::findChildren<QAction*>();
每个元素“文件,编辑帮助”QAction::menu()
返回一个有效的菜单指针,所以我可以获得每个菜单的操作列表,但这对我来说根本不起作用。