c++ - 在多个 Qmenu 中重用一个 QMenu

标签 c++ qt parent qobject qmenu

大家好,

    我有一些代码根据一些数据生成动态填充的 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/

相关文章:

c++ - 如何获取具有给定类名的未知类的对象

c++ - 设计模式灵活性问题工厂方法

c++ - 从给定的种子在 C++ 中生成相同的随机数序列

c++ - Qt Creator 中的 Qt GUI 应用程序build设置

qt - 当子窗口隐藏时调整 qt 小部件的大小

qt - MinGW Debug模式下 Qt 应用程序启动缓慢

jQuery:获取所选单选按钮的父tr

c++ - 我在这个 C++ FreeType GLFW 应用程序的编译/链接阶段缺少什么?

delphi - 为什么 "ParentBackground"不适用于 Windows 经典主题? (德尔福)

Hibernate:在没有双向关系的情况下获取 OneToMany-Child 实体的父级