Qt-关于QMainWindow无法直接使用QLayout布局管理器的问题

目录

 1.问题复现

2.问题解决


 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);
}
图1 布局失败

        mainwindow直接调用setLayout()发现无效,通过查阅Qt助手得知,在QMainWindow框架下已经有自己预设好的布局,用户无法再次布局,看下图红框内容:

图2 QMainWindow布局


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://pan.baidu.com/s/1oSOZ-FSWzedJ_VG4XhIfsg
提取码:2zk8


转载请注明出处。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值