QMenu的findChild无法正常工作

时间:2018-10-02 05:22:17

标签: c++ qt qt5 qmenu

QMenu的findChild不能正常工作。

以下是您的代码

QMenu* lMenu;
QMenu* existingMenu = lMenu->findChild<QMenu*>(QString("A..."));
if (!existingMenu)
  lMenu->addMenu("A...");

即使字符串A的菜单已经存在,我仍将现有菜单作为NULL

2 个答案:

答案 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";
}