Qt布局管理

摘要:
1.在父窗体控件中设置控件的坐标和大小->高度);高度);……------------------------------QGridLayout使用布局->

设计软件中各个部件的位置排列,有两种方法:

1.设置widget的在父窗体中的坐标和大小

widget->move(x,y);

widget->resize(width,height);

//widget->setGeometry(QRect(x,y,width,height));

什么时候用:不想被布局约束,对这种控件可控制时

例如下面的可活动按钮

Qt布局管理第1张

缺点:在遇到很多个部件时,一个个算坐标会很麻烦

部件不自动随父窗体的变化而变化(这里要重写resizeEvent事件算变化比例建立父子窗体之间的联系,而布局很容易做到)

 

2.布局管理Layout(可控制的部件不要使用布局中,一旦改变会影响到整体布局)

经常要用到的三个布局部件

QHBoxLayout水平布局

QVBoxLayout垂直布局

QGridLayout表格布局

 

————————————————————————————————

QHBoxLayout和QVBoxLayout用法相同

基本:

vlayout->addWidget(w1);

vlayout->addWidget(w2);

……

——————————————————————————————————

QGridLayout用法

layout->addWidget(widget,row,column,rowSpan,columnSpan);

layout->addLayout(layout,row,column,rowSpan,columnSpan);

(row,column):控件占据左上角的单元格位置

rowSpan:控件占据的行数

columnSpan:控件占据的列数(不写默认为1)

——————————————————————————————

控件随窗体伸缩

将布局与主窗体建立联系

layout=new QHBoxLayout(this);

或者this->setLayout(layout);

——————————————————————————————

layout->addStretch();可伸缩的空间

layout->setAlignment(Qt::AlignHCenter);//布局内控件水平居中 

layout->setSpacing(10);//控件间隔为10

layout->setMargin(10);//页边距为10

Qt设计器中spacer控件

以上在对控件位置调整时常用

 

——————————————————————————————————

结合SizePolicy属性控制布局管理中的控件的尺寸自适应方式

也就是控件随主窗体伸缩方式(可自行增大或缩小)

QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//可自行增大和收缩

Fixed:不能放大或缩小

Minimum:不能小于sizeHint尺寸,可放大(若设置了最大尺寸)

Maximum:不能放大,可缩小到允许的最小尺寸(若setMinimumSize(10,10)只能缩小到(10,10))

Preferred:控件的sizeHint是他的Hint,可以放大或缩小

 

————————————————————————————————————————————

比例因子的使用

例:布局中有左右两控件,右边比左边水平伸缩2倍

sizePolicy.setHorizontalStretch(1);
sizePolicy.setVerticalStretch(0);

left->setSizePolicy(sizePolicy);

sizePolicy.setHorizontalStretch(2);
sizePolicy.setVerticalStretch(0);

left->setSizePolicy(sizePolicy);

水平伸展比例(1,2)

垂直伸展比例(0,0)

——————————————————————————————————————————————————

布局顾名思义是对控件的位置的整体规划,每个控件之间都存在着位置关系,所以改变控件(移动、关闭)会破坏布局

——————————————————————————————————————————————————

结论:两种方法结合使用,应该可以应对大部分界面布局

本人是菜鸟,实践不多,如有错误欢迎指正

—————————————————————————————————————————————————

上述代码是为了理解布局使用,Qt设计器可实现

 

免责声明:文章转载自《Qt布局管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 替换windows换行符为unix格式zabbix企业应用之bind dns监控(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu下设置开机自动挂载硬盘

Ubuntu下设置开机自动挂载硬盘       我们在linux中常常用mount命令把硬盘分区或者光盘挂载到文件系统中。/etc/fstab就是在开机引导的时候自动挂载到linux的文件系统。   如果给计算机配了一块新磁盘,已经分区,格式化,挂载,但当计算机重启后,然后我们想让计算机启动时自动挂载,方法就是修改文件 /etc/fstab,...

Word 中设置图、表、公式、代码要与正文之间行间距

一、概述 在撰写论文等文档时,常常对图、表、公式、代码要与正文之间行间距有要求。例如: (5)图、表、公式、代码要与正文之间有6磅的行间距。 二、设置方式 选中 图/表/公式/代码 与 图题/表头/-/- ,点击鼠标右键->段落->间距->段前/段后。 如下图: 效果如下图: 此文在我的 Github Pages 上同步发布,地址为:{...

DotNetBar 源码与安装版本

  DotNetBar是一款带有56个 Windows Form 控件的工具箱,使开发人员可以轻而易举地创建出专业美观的Windows Form应用程序用户界面,控件全部采用C#编写,引入了全部Office 2007 style Ribbon控件、Office 2003 office2010 样式、支持windows7,Windows XP主题等。DotN...

C# MDI 窗体和菜单

MDI主窗体和子窗体 1,如何把之前的子窗体提到前面? 调用子窗体的Activate()即可,TopMost没什么用,只是表示位于没有设置topmost的其它窗体之上而已 2,MDI子窗体的标题栏很难去掉,通过把窗口风格设置为NONE的方法对于最大化的窗口没用,而非最大化手动设置子窗体位置又很麻烦,总是设置不对,有偏移 但是子窗口标题栏会和菜单整合在一起,...

MySQL 替换和截取指定位置字符串

  1.情景展示   返回服务器的身份证号需要进行加密:只保留前4位和后3位,中间使用*代替,如何实现?  2.场景分析   需要用到的函数有:IFNULL(),IF(),LENGTH(),REPLACE(),SUBSTR(),这里重点介绍一下REPLACE()和SUBSTR()。   REPLACE(str,from_str,to_str)   介绍:...

根据class显示或隐藏多个div

引用一下jquery,然后function放head中 function test(){ $(".1").css("display","none"); //隐藏class为1 的div //控制显示的话 $(".1").css("display","block"); //$(".2").css("display","none"); 隐藏clas...