QT常用的布局方法

4 篇文章 0 订阅

不管是QT还是MFC,自动生成的UI文件如果不做处理,默认不能随着鼠标拉伸页面去自适应大小,
Qt想做出好看的页面,基本都是qss和layout布局的合成效果,不用这俩玩意去处理页面,做出来的页面大概率很难看…比如下面是没做任何处理的页面:
在这里插入图片描述
页面被拉伸之后:
在这里插入图片描述
但是很多页面需要随着鼠标拉伸按照比例改变自身大小的,这个时候就要用到Layout布局了;
QT布局有4大类:QBoxLayout, QGridLayout(), QFormLayout, QStackedLayout,它们的父类都是QLayout;
其中 QBoxLayout用的多一些,它主要包含两个子类:QHBoxLayout(水平布局), QVBoxLayout(垂直布局);
UI文件布局中还有一个重要属性:LayoutStrecth,它可以用来设置各个控件的比例大小,如果设置成2,3,3,那么布局中的三个控件就是按照2比3比3的大小比例缩放,注意这个比例不要设置成0,0就是无效比例。

下面介绍一下添加布局的方法:

(1)在ui文件中给控件布局:
在ui文件中选择几个控件,右键点击,在最下面的选项可以设置各种布局,并且右下角LayoutStretch可以设置控件在布局中的比例大小;(规划的时候最好遵循"先局部后整体",先把局部布局给完成,然后再把局部布局嵌入到其它的布局当中,更容易达到我们想要的效果;如果一上来就先弄整体布局,最后做子布局的分配,会有很多细节不太好掌控)
在这里插入图片描述
上面的操作只是给控件之间布局,在所有的子布局完成之后,要点击整个页面,给它们一个整体的布局(把子布局嵌套到整体布局中),这样才能使整个页面自适应大小!在布局管理器可以看到整体和局部布局:
在这里插入图片描述
最后生成的程序中,页面不管怎么拉伸,这些控件的大小和间隔比例永远都是固定的:
在这里插入图片描述

(2) 用代码添加布局方式:
布局类有几个关键的成员函数:
void addSpacing(int size); //添加间隔大小
void addStretch(int stretch = 0); //添加控件大小比例
void addSpacerItem(QSpacerItem *spacerItem); //添加弹簧
void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = Qt::Alignment());//添加普通控件
void addLayout(QLayout *layout, int stretch = 0);//添加子布局

#include "QssDemo.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSpacerItem>

QssDemo::QssDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	QVBoxLayout *vLayout1 = new QVBoxLayout();
	QVBoxLayout *hLayout1 = new QVBoxLayout();
	QHBoxLayout *sumLayout = new QHBoxLayout();

	//子布局1
	vLayout1->addWidget(ui.firstBtn, 1);    //添加控件和大小比例
	vLayout1->addWidget(ui.secondBtn, 1);    //添加控件和大小比例
	vLayout1->addWidget(ui.thirdBtn, 1);    //添加控件和大小比例
	vLayout1->addWidget(ui.forthBtn, 1);    //添加控件和大小比例

	//子布局2
	hLayout1->addWidget(ui.tableWidget, 5);
	hLayout1->addWidget(ui.fifthBtn, 1);

	//总布局
	sumLayout->addLayout(vLayout1, 3);
	sumLayout->addSpacerItem(new QSpacerItem(20, 20));
	sumLayout->addStretch(1);
	sumLayout->addLayout(hLayout1, 5);
	this->setLayout(sumLayout);
}

最后的运行结果跟之前是一样的,页面控件大小都是按照比例缩放的。

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值