Attempting to add QLayout "" to MainWindow "", which already has a layout
轉載來自:http://www.cnblogs.com/oakentree/p/4433086.html
給QWidget或者QDialog設定佈局的時候方式很簡單。建立好一個佈局:mainLayout,然後不停地把各個控制元件往mainLayout裡面放,最後呼叫setLayout(mainLayout)就行了。
QMainWindow中使用這個方法的時候卻不管用,因為QMainWindow是預設有layout的,所以再次設定layout會失效。
會出現這種提示:
QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
這句話的意思是說,你已經給MainWindow設定過一個佈局了,再設定一個會出錯。
該如何給QMainWindow正確地設定佈局呢
要想QMainWidget建立佈局,合理的步驟應該是這樣的:
第一步建立一個QWidget例項,並將這個例項設定為centralWidget:
然後建立一個主佈局mainLayout,並把所需要的所有控制元件都往裡面放(工具欄、選單欄、狀態列除外):
...
最一步就是將widget的佈局設定為mainLayout
widget = new QWidget(); this->setCentralWidget(widget); cbox = new QCheckBox(this); cbox->setText("choose"); cbox->setChecked(false); button = new QPushButton(this); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(cbox); layout->addWidget(button); widget->setLayout(layout);
QMainWindow中使用這個方法的時候卻不管用,因為QMainWindow是預設有layout的,所以再次設定layout會失效。
會出現這種提示:
QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
這句話的意思是說,你已經給MainWindow設定過一個佈局了,再設定一個會出錯。
該如何給QMainWindow正確地設定佈局呢
要想QMainWidget建立佈局,合理的步驟應該是這樣的:
第一步建立一個QWidget例項,並將這個例項設定為centralWidget:
然後建立一個主佈局mainLayout,並把所需要的所有控制元件都往裡面放(工具欄、選單欄、狀態列除外):
...
最一步就是將widget的佈局設定為mainLayout
widget = new QWidget(); this->setCentralWidget(widget); cbox = new QCheckBox(this); cbox->setText("choose"); cbox->setChecked(false); button = new QPushButton(this); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(cbox); layout->addWidget(button); widget->setLayout(layout);