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