大家好,
我有一些代码根据一些数据生成动态填充的 QMenu(我将其称为 thisMenu)。创建了 QMenu thisMenu,将一些“主”QWidget 作为父级,并添加到此 QWidget 内的 QMenuBar (menuBar.addMenu(&thisMenu)。稍后,我希望用户能够从上下文菜单访问 thisMenu(用户右键单击 QWidget 的某些部分,这会弹出一个包含一些操作的 QMenu(称为 contextMenu),以及之前的 QMenu 作为子菜单)。
如果我重用第一次使用 contextMenu.addMenu(&thisMenu) 创建的 QMenu,我会发现,即使 contextMenu 在正确的全局位置弹出,thisMenu 也总是会翻译到其他位置,有时出现在 contextMenu 上方,有时出现在 contextMenu 下方.
我可以测试这是否链接到育儿链:thisMenu 不是 contextMenu 的子级,如果我将其创建为 contextMenu 的子级,一切都很好。有没有一种方法可以干净地处理这种情况,而无需重新创建类似于 thisMenu 的 QMenu,或更改 thisMenu 的父级;即在 QMenuBar 和某些上下文菜单/QMenu 中重用 thisMenu?另外,处理 QMenu 的父级链和共享 QMenu 的正确方法是什么?
谢谢,
最佳答案
In other what is the proper way of handling parenting chain for QMenu and sharing QMenu?
您不能在多个位置共享 QMenu - 每个 QMenu 一次只能存在于一个位置。您应该创建单独的 QMenus:一个用于菜单栏,一个用于上下文菜单。
一种简单的方法是将菜单生成代码放入 for 循环中,以创建多个相同的菜单。
请问为什么要重用 QMenu?
I can test that this is linked to the parenting chain : thisMenu is not a child of contextMenu
是的,文档中有描述。当您将一个 QMenu 添加到另一个 QMenu 时,父级不会更改:http://qt-project.org/doc/qt-5/QMenu.html#addMenu
if I create it a child of contextMenu, everything is fine.
小部件的位置始终绘制在相对于其父级的位置。 (记住:QMenu 是 QWidget)
关于c++ - 在多个 Qmenu 中重用一个 QMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986012/