QMenu的findChild不能正常工作。
以下是您的代码
QMenu* lMenu;
QMenu* existingMenu = lMenu->findChild<QMenu*>(QString("A..."));
if (!existingMenu)
lMenu->addMenu("A...");
即使字符串A的菜单已经存在,我仍将现有菜单作为NULL
答案 0 :(得分:2)
方法findChild()
搜索objectName而不是标题,在您的情况下,子菜单没有名称,因此它返回一个空列表,因此您应该做的是过滤{{1 }},然后对标题进行第二个过滤:
QMenu
答案 1 :(得分:1)
如果要使用findChild,则必须将QMenu
视为QObject
。因为该功能用于搜索QObject
而不是QMenu
。
演示:
QMenu* menu = new QMenu;
QMenu* subMenu = new QMenu("subMenu", menu); // second parameter indicate menu is the parent qobject of subMenu
subMenu->setObjectName("subMenu object name"); // give submenu a qobject name for findChild
menu->addMenu(subMenu);
if(menu->findChild<QMenu*>("subMenu object name") == subMenu) {
qDebug()<<"Find subMenu";
}