c++ - QT:QActionGroup 添加到 QMenu 后,谁是 QActionGroup 成员的父级?
问题描述
在此示例中,将少量QAction
对象添加到QActionGroup
. 然后稍后,将相同的操作添加QMenu
为操作。的文档QActionGroup
建议通过将 aQAction
作为QActionGroup
父级传递给QAction
构造来添加。但是,我相信向 a 添加操作QMenu
会使 QMenu 成为父级。
谁将是示例中的父级(即,首先将操作添加到操作组,然后添加到菜单)?
更一般地说,如果您执行设置父项的操作,父项是否完全转移(即,对象的父项被设置为菜单并从 QActionGroup 子列表中删除)?我希望如此,但我无法在任何地方看到此内容,并希望得到确认。
我问是因为我正在做相当无害的动作,但看到的崩溃表明双重释放。
解决方案
首先让我们检查使用parent()
方法:
...
leftAlignAct = new QAction(tr("&Left Align"), this);
qDebug()<<"0"<<leftAlignAct->parent();
...
alignmentGroup->addAction(leftAlignAct);
qDebug()<<"1"<<leftAlignAct->parent();
...
formatMenu->addAction(leftAlignAct);
qDebug()<<"2"<<leftAlignAct->parent();
...
输出:
0 MainWindow(0x7fffd078fe80)
1 MainWindow(0x7fffd078fe80)
2 MainWindow(0x7fffd078fe80)
显然,父母QAction
从未改变,这是在他的创作中确立的,因此QMenu
或QActionGroup
适当的QAction
实际上,您传递给 QAction 的父级不会被 QMenu 或 QActionGroup 更改。QMenu 拥有 QAction 的所有权并不好,因为 QAction 可以是 QMenu 和 QToolBar 的一部分。而在 QActionGroup 中,您的任务是根据其他 QAction 修改状态,无需适当的 QAction。如果要将 QActionGroup 或 QMenu 设置为父级,请使用 setParent()
推荐阅读
- c++ - 用中间派生类覆盖多级继承,没有函数被覆盖
- php - “App\Entity\Cat”实体的配置不可用(该实体用作“cat”自动完成字段的目标)
- javascript - 在 Firestore 中读取子集合
- java - 将Java中的放大工具限制在应用程序窗口中
- python - 使用 matplotlib 设置或固定双变量分布值
- python - Django-url中的空字符串未重定向到索引页面
- java - OJDBC JAR .DependencyResolutionException
- c++ - AVL树插入方法导致分段错误
- typo3 - 从控制器更改 TYPO3 中的全局变量
- css - 如何让我的文本在 react-native 中围绕 div 浮动?