Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT:QActionGroup成员添加到QMenu后,谁是其父级成员?_C++_Qt_Qt4 - Fatal编程技术网

C++ QT:QActionGroup成员添加到QMenu后,谁是其父级成员?

C++ QT:QActionGroup成员添加到QMenu后,谁是其父级成员?,c++,qt,qt4,C++,Qt,Qt4,在中,少数QAction对象被添加到QActionGroup。然后,将相同的操作作为操作添加到QMenu。QActionGroup的文档建议通过将QActionGroup作为QAction构造的父项传入来添加QAction。但是,我相信向QMenu添加操作会使QMenu成为父菜单 谁将是示例中的家长(即,首先将操作添加到操作组,然后添加到菜单) 更一般地说,如果您执行设置父对象的操作,父对象是否完全转移(即,对象的父对象被设置到菜单并从QActionGroup子列表中删除)?我希望如此,但我在任

在中,少数
QAction
对象被添加到
QActionGroup
。然后,将相同的操作作为操作添加到
QMenu
QActionGroup
的文档建议通过将
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();
...
显然,
QAction
的父项从未改变,这是在他的创建过程中建立的,因此
QMenu
QAction组
是适当的
QAction



实际上,QMenu或QActionGroup不会更改传递给QAction的父级。QMenu拥有QAction的所有权是不好的,因为QAction可以是QMenu和QToolBar的一部分。在QActionGroup中,您的任务是根据另一个QAction修改状态,不需要适当的QAction。如果您想将QActionGroup或QMenu设置为父级,那么请使用setParent()

这两种方法都不重新分配…这很奇怪。您是用Qt4做的,对吗?@MrMas是的,我使用的是4.8.7:),所以…您可以将操作的父对象设置为qactiongroup或qmenu,但将操作添加到菜单或组不会重新分配操作,因此菜单和组不会将操作添加到子列表中。@MrMas事实上,QMenu或QActionGroup不会更改传递给QAction的父级。QMenu拥有QAction的所有权是不好的,因为QAction可以是QMenu和QToolBar的一部分。在QActionGroup中,您的任务是根据另一个QAction修改状态,不需要适当的QAction。如果您想将QActionGroup或QMenu设置为父级,那么在本例中使用setParent(),我认为这种怀疑来自无知。
0 MainWindow(0x7fffd078fe80) 
1 MainWindow(0x7fffd078fe80) 
2 MainWindow(0x7fffd078fe80)