QT:QActionGroup 添加到 QMenu 后,其成员的父对象是谁?
QT: Who is the parent of members of a QActionGroup after it is added to a QMenu?
在 this example 中,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();
...
输出:
0 MainWindow(0x7fffd078fe80)
1 MainWindow(0x7fffd078fe80)
2 MainWindow(0x7fffd078fe80)
显然 QAction
的父级从未改变,这是在他的创作中确定的,因此 QMenu
或 QActionGroup
适当 QAction
事实上,您传递给QAction 的parent 不会被QMenu 或QActionGroup 改变。 QMenu 拥有 QAction 的所有权并不好,因为 QAction 可以是 QMenu 和 QToolBar 的一部分。而在 QActionGroup 中,您的任务是根据其他 QAction 修改状态,不需要适当的 QAction。如果您想将 QActionGroup 或 QMenu 设置为父级,请使用 setParent()
在 this example 中,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();
...
输出:
0 MainWindow(0x7fffd078fe80)
1 MainWindow(0x7fffd078fe80)
2 MainWindow(0x7fffd078fe80)
显然 QAction
的父级从未改变,这是在他的创作中确定的,因此 QMenu
或 QActionGroup
适当 QAction
事实上,您传递给QAction 的parent 不会被QMenu 或QActionGroup 改变。 QMenu 拥有 QAction 的所有权并不好,因为 QAction 可以是 QMenu 和 QToolBar 的一部分。而在 QActionGroup 中,您的任务是根据其他 QAction 修改状态,不需要适当的 QAction。如果您想将 QActionGroup 或 QMenu 设置为父级,请使用 setParent()