Qt布局管理器(QHBoxLayout,QVBoxLayout)

举报
人才程序员 发表于 2023/07/26 11:32:42 2023/07/26
【摘要】 @TOC提示:以下是本篇文章正文内容,下面案例可供参考 布局管理器是什么可以把一些组件按一定的次序排列,这就是布局管理器。他可以自动排列窗口中的界面组件窗口变化后自动更新界面组件。 使用代码添加布局管理器 QVBoxLayoutQVBoxLayout:按垂直的顺序排列组件添加组件/其他的布局管理器:addWidget(QWidget*);addLayout(Layout*);设置布局管理器管...

@TOC


提示:以下是本篇文章正文内容,下面案例可供参考

布局管理器是什么

可以把一些组件按一定的次序排列,这就是布局管理器。
他可以自动排列窗口中的界面组件
窗口变化后自动更新界面组件。

使用代码添加布局管理器

QVBoxLayout

在这里插入图片描述
QVBoxLayout:按垂直的顺序排列组件

添加组件/其他的布局管理器:

addWidget(QWidget*);
addLayout(Layout*);

设置布局管理器管理指定窗口:

Widget->setLayout(Layout*);

设置组件和窗口一起变大变小:

QWidget->setSizePolicy();

大家可以查帮助文档,我现在列出一部分


QSizePolicy::Fixed

QSizePolicy::Minimum

QSizePolicy::Maximum

QSizePolicy::Preferred

QSizePolicy::Expanding

设置组件的间隔:

setSpacing(int)

设置组件的比例因子:

setStretch(int index,int stretch)

使用部分:

//构造函数:
Form::Form(QWidget *parent) :
    QWidget(parent),btn0(this),btn1(this),btn2(this),
    ui(new Ui::Form)
{
    ui->setupUi(this);
    
    QVBoxLayout *layout = new QVBoxLayout(this);
    
    btn0.setText("Button 0");
    btn1.setText("Button 1");
    btn2.setText("Button 2");

	btn0.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    
	layout->setSpacing(10);
    
    layout->addWidget(&btn0);
    layout->addWidget(&btn1);
    layout->addWidget(&btn2);
    
    setLayout(layout);
}

//头文件:
#ifndef FORM_H
#define FORM_H

#include <QWidget>
#include <QPushButton>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT
    
    QPushButton btn0;
    QPushButton btn1;
    QPushButton btn2;

public:
    explicit Form(QWidget *parent = 0);
    ~Form();

private:
    Ui::Form *ui;

private slots:
};

#endif // FORM_H

QHBoxLayout

在这里插入图片描述
他和QVBoxLayout基本一致,在这我就不讲了

使用ui文件添加布局管理器

1、把下列的组件拖出,把组件放在里面
在这里插入图片描述

在这里插入图片描述

2、点击按钮,排序某个Widget
先添加组件
首先选中你要排序的Widget
然后点击下面的东西:

在这里插入图片描述
想要不用也是很简单,选中指定的Widget,点击打破布局。

布局管理器的嵌套

在这里插入图片描述
把QHbox放到QVbox中,组成一个网格布局。
代码如下:

//Widget,h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

    QPushButton btn0;
    QPushButton btn1;
    QPushButton btn2;
    QPushButton btn3;

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H


//Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>

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

    QVBoxLayout *layout = new QVBoxLayout(this);
    QHBoxLayout *hbox1 = new QHBoxLayout(this);
    QHBoxLayout *hbox2 = new QHBoxLayout(this);

    btn0.setText("Button 0");
    btn1.setText("Button 1");
    btn2.setText("Button 2");
    btn3.setText("Button 3");

    btn0.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    btn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    layout->addLayout(hbox1);
    layout->addLayout(hbox2);

    hbox1->addWidget(&btn0);
    hbox1->addWidget(&btn1);
    hbox2->addWidget(&btn2);
    hbox2->addWidget(&btn3);

    setLayout(layout);
}

Widget::~Widget()
{
    delete ui;
}

效果如下:
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。