Qt:Attempting to add QLayout "" to MainWindow "", which already has a layout
2016-10-15 15:28
411 查看
错误描述:
给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
实例:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle("Enter you age"); spinbox = new QSpinBox; spinbox->setRange(0,100); slider = new QSlider(Qt::Horizontal); slider->setRange(0,100); connect(spinbox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int))); connect(slider,SIGNAL(valueChanged(int)),spinbox,SLOT(setValue(int))); spinbox->setValue(35); widget = new QWidget; QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(spinbox); layout->addWidget(slider); widget->setLayout(layout); setCentralWidget(widget); }
效果图:
相关文章推荐
- Qt提示:setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout
- Qt中使用setLayout()函数时报错------Attempting to set QLayout "" on MainWindow "MainWindow",which already has
- setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
- setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
- setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
- setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
- QLayout: Attempting to add QLayout "" to MyTcpClient "", which already has a layout
- QLayout: Attempting to add QLayout XXX to XXX, which already has a layout
- QT Widget::setLayout: Attempting to set QLayout “” on Widget “”, which already has a layout
- qt QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout. 错误
- Attempting to add QLayout "" to MainWindow "", which already has a layout 给QWidget或者QDialog设置布局的时候方
- ListView "Cannot add header view to list -- setAdapter has already been called."
- Android报错:WindowManager$BadTokenException: Unable to add window -- window has already been added
- "Unable to add selected web parts. (insert part name): An error has occured."