c++ - Qt QMenu延迟初始化

标签 c++ qt lazy-initialization qmenu

在我的QMenu中,我有一个子菜单,可能包含数百个项目,并且并不总是使用它,因此我考虑仅根据需要初始化它:

The menu in question

我怀疑这可以通过实现 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);

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

关于c++ - Qt QMenu延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124514/

相关文章:

python - `Fatal Python error: PyThreadState_Get: no current thread` 是什么意思?

c++ - 谷歌测试 : error LNK2019: unresolved external symbol with Visual Studio 2013

c++ - 我怎么能通过cmake执行exe(Qt3的uic)

c++ - 限制 qpainter 在像素图上的绘制

qt - 使用QT AES/ECB/PKCS5Padding解密

c++ - 线程安全类的有序静态初始化

ocaml - (懒)Haskell 在 OCaml 中未定义/底部

c++ - 使用字符数组作为映射中的键

c# - 延迟实例化的传递参数

c++ - C++0x 正式发布了吗?主要编译器支持吗?