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...");
}

10-08 08:19