QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?相关的知识,希望对你有一定的参考价值。

this example,一些QAction物体被添加到QActionGroup。然后,将相同的操作添加到QMenu作为操作。 QActionGroup的文档建议通过传入QAction作为QActionGroup构造的父级来添加QAction。但是,我相信对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的父母从未改变,这是在他的创作中建立的所以QMenuQActionGroup适当的QAction


实际上,传递给QAction的父级不会被QMenu或QActionGroup更改。由于QAction可以是QMenu和QToolBar的一部分,因此QMenu获得QAction的所有权并不好。而在QActionGroup中你的任务是根据其他QAction修改状态,不需要适当的QAction。如果要将QActionGroup或QMenu设置为父级,则使用setParent()

以上是关于QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?的主要内容,如果未能解决你的问题,请参考以下文章

Qt:删除MainWindow后QMenu似乎没有被删除

Qt 中如何隐藏 QMenu

Qt QAction 动态数组连接

Qt Connect 触发 QMenu 的 SIGNAL

Qt中QMenu的菜单关闭处理方法

如何使用 Qt 将可折叠元素(QMenu、QComboBox)渲染到位图缓冲区?