往期回顾:

【QT入门】 Qt代码创建布局之水平布局、竖直布局详解-CSDN博客

【QT入门】 Qt代码创建布局之栅格布局详解-CSDN博客

【QT入门】 Qt代码创建布局之分裂器布局详解-CSDN博客

 【QT入门】 Qt代码创建布局之setLayout使用

一、setLayout

1、什么是setLayout

setLayout是一个用于设置布局的方法,通常用于图形界面开发中。在不同的图形界面库或框架中,setLayout的使用方式可能会有所不同,但通常都是用来指定组件在父容器中的布局方式和位置。

一般来说,setLayout 方法会接受一个布局管理器(layout manager)作为参数,该布局管理器会定义组件的排列方式。常见的布局管理器包括HBoxLayout、BorderLayout、GridLayout 等。

2、使用特点

记住如果你已经在某个小部件上使用了布局管理器并setLayout,那么QWidget不会再让你实用另一个。必须首先删除现有的布局管理器(由layout()返回),然后才能用新的布局调用setLayout()。

什么意思呢?就是说在一个程序里,setLayout只会生效一次,如果我同时设置多个布局,最终会是第一个布局。

3、代码示例

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //不用加this
    QPushButton* btn1 = new QPushButton;
    btn1->setFixedSize(100, 100);
    btn1->setText("btn1");

    QPushButton* btn2 = new QPushButton;
    btn2->setFixedSize(100, 100);
    btn2->setText("btn2");

    QHBoxLayout* hLay = new QHBoxLayout(this);
    hLay->addWidget(btn1);
    hLay->addWidget(btn2);
    setLayout(hLay);//设置水平布局

    QPushButton* btn3 = new QPushButton;
    btn3->setFixedSize(100, 100);
    btn3->setText("btn3");

    QPushButton* btn4 = new QPushButton;
    btn4->setFixedSize(100, 100);
    btn4->setText("btn4");

    QVBoxLayout* vLay = new QVBoxLayout(this);
    vLay->addWidget(btn3);
    vLay->addWidget(btn4);
    setLayout(vLay);//设置垂直布局
}

比如在这个例子里,我用了两次setLayout方法,但是最终出现的是水平布局,不仅如此,垂直布局的btn3和btn4都不会显示在窗口上,即使是给垂直布局指定了父类为this。就是因为在一个程序里,setLayout只会生效一次,我同时设置多个布局,最终会是第一个布局。

运行结果:

但是,如果我在这里给btn3或者btn4指定了父类指针为this,这两个按钮就可以显示在窗口上,只是说不会按照垂直布局显示。

假设我设置btn3的父类指针为this

    QPushButton* btn3 = new QPushButton(this);
    btn3->setFixedSize(100, 100);
    btn3->setText("btn3");

则最终运行结果如下:

 可以看到btn3会显示在窗口上,但是不会按布局显示,因为第二次setLayout对他是无效的


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐