1. 程式人生 > 其它 >Attempting to add QLayout "" to MainWindow "", which already has a layout

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);