在我的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);
它甚至可以打开最近生成的菜单,因此它是无缝的
关于c++ - Qt QMenu延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124514/