目录
1.问题复现
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLabel *label = new QLabel(this);
label->setText("QLabel");
QGridLayout *gridlayout = new QGridLayout(this);
gridlayout->addWidget(label,0,0,1,1);
this->setLayout(gridlayout);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6714efaf77d7ddcc2f3c536b38c2f39b.png)
mainwindow直接调用setLayout()发现无效,通过查阅Qt助手得知,在QMainWindow框架下已经有自己预设好的布局,用户无法再次布局,看下图红框内容:
![](https://i-blog.csdnimg.cn/blog_migrate/d011870df52477733e2addfcc73a45d2.png)
2.问题解决
QMainWindow预设的布局从上到下依次是菜单栏(Menu Bar)、工具栏(ToolBars)、停靠窗口(Dock Widgets)、中心窗口(Central widgets)、状态栏(Status Bar),我们用户设计各个控件实际大部分在Central widgets区域,要想实现自由布局,可以在该区域放置一个QWidget窗口,在QWidget内就可以自由使用布局管理器,在QMainWindow内只需要调用setCentralWidget()即可。代码如下:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget *widget = new QWidget(this);
this->setCentralWidget(widget);
QLabel *label = new QLabel(widget);
label->setText("QLabel");
label->setAlignment(Qt::AlignCenter);//居中显示
QGridLayout *gridlayout = new QGridLayout(widget);
gridlayout->addWidget(label,0,0,1,1);//将QLabel添加到网格布局的0行0列,占用1行1列
widget->setLayout(gridlayout);
}
![](https://i-blog.csdnimg.cn/blog_migrate/d38744aaf7b6658377116a667107fd4a.png)
工程文件下载:
链接:https://pan.baidu.com/s/1oSOZ-FSWzedJ_VG4XhIfsg
提取码:2zk8
转载请注明出处。