QMenu的findChild无法正常工作。
以下是适合您的代码
QMenu* lMenu;
QMenu* existingMenu = lMenu->findChild<QMenu*>(QString("A..."));
if (!existingMenu)
lMenu->addMenu("A...");
即使字符串A的菜单已经存在,我仍在将现有菜单获取为NULL
最佳答案
findChild()
方法搜索objectName而不是标题,在您的情况下,子菜单没有名称,因此它返回一个空列表,因此您应该先过滤QMenu
,然后使用标题:
#include <algorithm>
...
QString text("A...");
// get sub-menus
QList<QMenu *> sub_menus = lMenu->findChildren<QMenu *>();
// filter by title
if(std::find_if(sub_menus.begin(), sub_menus.end(),
[text] (QMenu *menu){ return menu->title() == text; }) == sub_menus.end())
{
lMenu->addMenu("A...");
}