gpt4 book ai didi

c++ - Qt 将菜单操作组合在一起

转载 作者:行者123 更新时间:2023-11-28 05:12:53 26 4
gpt4 key购买 nike

我有一些 QMenu 对象,它们在它们和工具栏之间共享一些 QAction

这里的细节是我想在其他菜单上重现一些菜单部分。例如,在我的 QMainWindow 对象的 MenuBar 中,我有类似的东西

File
(x) New
(x) Open
(x) Save
(x) ------
(x) Add Sketch...
(-) Export...
(-) Import...

然后,在某些上下文菜单中,我想使用相同的操作对象,仅使用标记有 (x) 的操作来重现完全相同的结构。我想在多个菜单上执行此操作。

天真的做法是在构建QMainWindow菜单和重复结构的上下文菜单时重复相同的代码。但这意味着重复代码,因此维护工作量加倍(乘以重复菜单操作的次数)。

在 Qt 上有解决这个问题的直接方法吗?

最佳答案

一个选项可以是将操作存储在字典中,然后为每个子菜单保存不同的键列表。稍后您要做的只是使用一个简单的 for 来构建菜单。代码草案可能如下所示:

QMap<QString, QAction*> actions;
actions["new"] = new QAction(...); // connect, etc.
actions["-"] = new QAction(...); // for separator

QMap<QString, QStringList> menus;
menus["file"] << "new" << "save" << ... << "import" << ...;
menus["context1"] << "new" << "save" << ...;

QMenu* buildMenu(const QString& name) {
if (!menus.contains(name)) return nullptr;
auto menu = new QMenu();
Q_FOREACH (const auto& entry, menus[name]) {
menu->addAction(actions[entry]);
}
return menu;
}

最后,使 actionsmenus 可用于 buildMenu(一个类,匿名命名空间以及一些初始化...)。还记得在使用后删除返回的菜单。

关于c++ - Qt 将菜单操作组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43187506/

26 4 0