我的应用程序中有一个QDialog窗口,我通过此代码为其布局动态添加QComboBox
Orderdialog.cpp
void Orderdialog::addElements()
{
ui->setupUi(this);
msgComboBox = new QComboBox();
lbl = new QLabel();
lbl->setText("Message");
ui->formLayout->addRow(lbl,msgComboBox);
}
(msgComboBox&lbl在头文件中定义)
根据this question设置attritubte将在执行close()事件时删除对话框对象。
我想知道的是它是删除这些动态添加的msgComboBox&lbl还是我需要在Orderdialog类的析构函数中手动删除它们?
在Qt:
QObject
s被摧毁时,他们会摧毁他们的孩子。Qt::WA_DeleteOnClose
属性,否则不会删除它。QWidget是一个QObject,因此它也符合第一点,因此QWidget是另一个QWidget的子节点,至少有3种可能:
setParent()
方法。在lbl
和msgComboBox
被传递到布局的情况下,这将是已建立的QWidget
的孩子们,因为我不知道.ui不能说谁是他的父母,但我可以说有亲属关系与窗口。
所以当窗口被破坏时你的孩子也会被摧毁,这些孩子会摧毁他们的孩子,所以lbl和msgComboBox将被销毁,所以你只需要setAttribute(Qt::WA_DeleteOnClose)
这样当窗口是lbl,msgComboBox和相同的Orderdialog时就会被删除关闭。