在多个Q菜单中重复使用一个Q菜单
Reusing a QMenu within multiple Qmenu
大家好,
nbsp nbsp;我有一些代码根据一些数据生成一个动态填充的QMenu(我将称之为thisMenu)。创建了QMenu thisMenu,将一些"主"QWidget作为父菜单,并将其添加到该QWidget内的QMenuBar(menuBar.addMenu(&thisMenu))。稍后,我希望用户能够从上下文菜单访问thisMenu(用户右键单击QWidget的某个部分,弹出一个带有一些操作的QMenu(称为上下文菜单),并将上一个QMenu作为子菜单)。
nbsp nbsp;如果我重复使用我第一次使用contextMenu.addMenu(&thisMenu)创建的QMenu,我会发现,即使contextMenu弹出在正确的全局位置,thisMenu也总是被翻译到其他位置,有时出现在contextMenu的上方,有时在其下。
nbsp nbsp;我可以测试这是否链接到了育儿链:thisMenu不是contextMenu的子菜单,如果我将其创建为contextMenu的一个子菜单,一切都很好。是否有一种方法可以在不重新创建类似于thisMenu的QMenu或更改thisMenu的父菜单的情况下干净地处理这种情况;即在QMenuBar和某些上下文菜单/QMenu中重复使用此菜单?换句话说,处理QMenu的育儿链和共享QMenu是什么正确的方式?
nbsp nbsp;谢谢你,
换句话说,处理QMenu的育儿链和共享QMenu是什么正确的方式?
您不能在多个位置共享一个QMenu——每个QMenu一次只能存在于一个位置。您应该创建单独的QMenus:一个用于菜单栏,一个用于上下文菜单。
一个简单的方法是将菜单生成代码放在for循环中,创建多个相同的菜单。
请问您为什么要重用QMenu?
我可以测试一下这是否与育儿链有关:thisMenu不是contextMenu 的子项
是的,文档中对此进行了描述。将一个QMenu添加到另一个时,父菜单不会更改:http://qt-project.org/doc/qt-5/QMenu.html#addMenu
如果我将其创建为contextMenu的子项,那么一切都很好。
小部件的位置始终绘制在相对于其父对象的位置。(记住:QMenu是QWidget)
void duplicateMenu(QMenu* dst, QMenu& origin)
{
QMenu* sub = dst->addMenu(origin.title());
QList<QAction*> actions=origin.actions();
for(QList<QAction*>::iterator it=actions.begin(); it!=actions.end(); it++)
{
QMenu* itMenu = (*it)->menu();
if(itMenu!=NULL)
duplicateMenu(sub, *itMenu);
else
sub->addAction(*it);
}
}
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 触发另一个窗口的菜单按钮
- 我在窗口中有一个fltk Fl_Choice下拉菜单,但只能通过鼠标使用
- 使用 c++ 从另一个内部菜单返回到主菜单
- C++ 菜单代码 - 运行另一个类
- 从另一个菜单返回菜单
- 如何创建一个向量,用户可以在菜单更改之间继续添加值
- 使用 Qt 编写一个简单的帮助菜单
- winapi-如何在MFC中以编程方式将多个菜单栏添加到一个框架中
- 如何获取插入菜单项时要使用的下一个命令 ID
- 在多个Q菜单中重复使用一个Q菜单
- 如何知道一个给定QAction的父菜单
- 用c++编写一个菜单程序,让用户从选项列表中进行选择,如果输入的不是其中一个选项,则重新打印该列表
- 点击QSystemTrayIcon会在Mate桌面上弹出一个空的上下文菜单
- 将菜单项位置引用到同一菜单中的另一个菜单项
- 在左侧创建一个菜单
- C++循环一个菜单,直到选择了所有选项
- 如何做一个功能,将返回我的主菜单从程序的任何地方