1
我正在运行一个测试来了解Qt中的父/子关系,我有一个关于如何在Qt Creator调试器中查看这些关系的问题。Qt父子关系
当我开始我的演示程序,这里是调试器显示:
因为我把Qt的dumpObjectTree()之前,我添加任何部件,该树是空的,除了主窗口的布局。这就是我的预期。
当我关闭应用程序,并调用〜MainWindow析构函数时,我再次调用dumpObjectTree(),但是这次我创建的所有小部件都显示在树中。如果我在窗口被销毁后调用dumpObjectTree(),树不应该再次变空吗?
我不能毁了孩子部件正确的,还是我误解由dumpObjecTree()函数显示的信息?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
qDebug() << "WINDOW INITIALIZED-------------";
dumpObjectTree();
this->buildLayout();
}
void MainWindow::buildLayout() {
QWidget *window = new QWidget(this);
this->setObjectName("Main Window");
layout = new QVBoxLayout();
QSplitter *split = new QSplitter();
split->setObjectName("Horizontal Split");
split->setOrientation(Qt::Horizontal);
QTextEdit *editor1 = new QTextEdit();
editor1->setObjectName("Editor 1");
QTextEdit *editor2 = new QTextEdit();
editor2->setObjectName("Editor 2");
split->addWidget(editor1);
split->addWidget(editor2);
QSplitter *split2 = new QSplitter();
split2->setObjectName("Vertical Split");
split2->setOrientation(Qt::Vertical);
QTextEdit *editor3 = new QTextEdit();
editor3->setObjectName("Editor 3");
split2->addWidget(split);
split2->addWidget(editor3);
QToolBar *mainToolbar = new QToolBar();
mainToolbar->setObjectName("Main Toolbar");
mainToolbar->addAction("Main Button 1");
mainToolbar->addSeparator();
mainToolbar->addAction("Main Button 2");
mainToolbar->setMovable(true);
layout->addWidget(mainToolbar);
layout->addWidget(split2);
QToolBar *toolbar = new QToolBar(this);
toolbar->setObjectName("Mini Toolbar");
toolbar->addAction("Button 1");
toolbar->addSeparator();
toolbar->addAction("Button 2");
toolbar->setMovable(true);
QMenuBar *menu = new QMenuBar(this);
menu->setObjectName("Menu Bar");
menu->addAction("Menu 1");
menu->addAction("Menu 2");
menu->addAction("Menu 3");
window->setLayout(layout);
MainWindow::addToolBar(toolbar);
MainWindow::setMenuBar(menu);
MainWindow::setCentralWidget(window);
}
MainWindow::~MainWindow()
{
delete layout;
qDebug() << "DESTROYED " << this->metaObject()->className();
qDebug() << "OBJECT TREE-------------";
dumpObjectTree();
qDebug() << "OBJECT INFO-------------";
dumpObjectInfo();
}
感谢
谢谢!如果我将父项传递给窗口构件的构造函数,如新的QComboBox(this),引用MainWindow,最好传递(this)还是实际的父元素?例如,如果我创建了一个名为* myWidget的小部件,并且我添加了一个新的QComboBox,我应该将它初始化为新的ComboBox(this)还是新的ComboBox(myWidgt)? – Marc 2013-02-20 18:16:44
一旦将QComboBox的父项添加到布局中,QComboBox的父项将被更改,因此,在构造函数中传递哪个父项并不重要,除非在构造时间和添加时间之间有可能抛出异常。 – Phlucious 2013-02-20 18:27:56