【问题标题】:Qt QMenu lazy initializationQt QMenu 延迟初始化
【发布时间】:2019-07-20 12:03:00
【问题描述】:

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

我怀疑这可以通过实现 QAbstractItemModel 并覆盖方法 canFetchMore fetchMore 来完成。

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

【问题讨论】:

    标签: c++ qt lazy-initialization qmenu


    【解决方案1】:

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

    //    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);
    

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

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2020-10-08
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多