QT:添加到QMenu后,谁是QActionGroup成员的父级

QT: Who is the parent of members of a QActionGroup after it is added to a QMenu?

本文关键字:成员 QActionGroup 谁是 添加 QMenu QT      更新时间:2023-10-16

在本例中,几个QAction对象被添加到QActionGroup中。随后,将相同的动作作为动作添加到QMenuQActionGroup的文档建议通过传递QActionGroup作为QAction构造的父对象来添加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更改。QMenu拥有QAction是不好的,因为QAction可以是QMenu和QToolBar的一部分。并且在QActionGroup中,您的任务是根据其他QAction修改状态,不需要适当的QAction。如果要将QActionGroup或QMenu设置为父级,请使用setParent((