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

问题描述 投票:1回答:1

this example,一些QAction物体被添加到QActionGroup。然后,将相同的操作添加到QMenu作为操作。 QActionGroup的文档建议通过传入QAction作为QActionGroup构造的父级来添加QAction。但是,我相信对QMenu添加动作会使QMenu成为父母。

谁将是示例中的父级(即,首先添加到操作组,然后添加到菜单中的操作)?

更一般地说,如果您执行设置父项的操作,父项是否完全转移(即,对象的父项设置为菜单并从QActionGroup子项列表中删除)?我希望如此,但我无法在任何地方看到它,并希望得到确认。

我问,因为我做了相当无害的行动,但看到崩溃表明双重自由。

c++ qt qt4
1个回答
2
投票

首先让我们使用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()

© www.soinside.com 2019 - 2024. All rights reserved.