Qt QMenu延迟初始化

Qt QMenu lazy initialization

在我的 QMenu 中,我有一个可能包含数百个项目的子菜单,它并不总是被使用,所以我正在考虑仅在需要时初始化它:

我怀疑这可以通过实施 QAbstractItemModel 并覆盖方法 canFetchMore fetchMore.

来完成

有没有更简单的方法使用一些技巧?我不介意它是否有点骇人听闻(比如用好的菜单或类似的东西点击后替换虚拟菜单)。

一种 hackish 方式,但在我的初始测试中效果很好,类似于:

//    menuBar->addMenu(Slow::APIMenu()); //old way

    auto emptyApiMenu = new QMenu("API");
    emptyApiMenu->addAction("API"); //dummy item to avoid qt warning of invisible menu
    QObject::connect(emptyApiMenu, &QMenu::aboutToShow, [=]() //lazy initialization of API menu
    {
        menuBar->insertMenu(emptyApiMenu->menuAction(), Slow::APIMenu());
        menuBar->removeAction(emptyApiMenu->menuAction());
    });
    menuBar->addMenu(emptyApiMenu);

它甚至可以打开最近生成的菜单,所以它是无缝的