Qt界面布局是用来界面上控件排序的,例如对齐、自适应分辨率等都要用到布局。

Qt界面布局跟Visual Studio系列完全不一样,VS系列的操作很简单,一般情况下,很快就能入手了,但比较死板(特别是老版本,对自适应分辨率界面设计支持很差,就像VC6,很麻烦)

ps:这一组操作,很熟悉,很方便。唯一不支持就是自适应分辨率,其他都很好,特别是对齐、排列很好用

Qt界面布局操作要复杂一点,需要一些技巧。

Qt布局,实际上他把他抽象了几个控件。

那么如何使用Qt进行布局设计呢?

  1. 要做好布局,首先确定该界面上有多少控件哪些控件。这个很重要。如果不确定,后面一点点增加,有时候不好拖,可能需要重新布局。例如图

上面有5个label,2个LineEdit,3个PushButton,1个TableView;2个Horizontal Spacer(为了占位置,后面会讲到这个辅助作用)。这些控件,最好在做布局前都拖好,位置大概调整下。换句话说,如果界面上没有控件,或很少控件,就很难做布局了,也没必要做布局。

  1. 设置布局的时候,一定要遵循从里到外的顺序这个原则。

就拿这个图来说,我们要划分的,先切成4块内容,这4块内容组成一个纵向布局,而每个块都是一个横向布局(除了最后一个tableview)。例如蓝色框框内,第一行就是第一块内容,是一个横向布局。尽量先拆分成先横向再纵向,或先纵向再纵向。不要一会纵向一会横向,这样容易造成混乱,导致后面布局不如意。

如果界面足够复杂,可以把一个界面理解成由多个子界面组成(每个子界面都是一个独立的Widget或Frame),而每个子界面就相当于一个控件(相对于大一级界面)。布局顺序也是先布局子界面,然后大一级界面。

这里的界面级数最好不要超过3级,否则乱。

  1. 同一个布局内的控件,都是自动对齐。

此时,控件位置、大小会随着主界面变大变小而变化。

一般来说,存在以下几种需求:

  1. 像第1块内容里的 “业务代码”、“输入0~255数字”、“0xFF”以及他们中间的那个LineEdit,我们希望在主界面拉大的时候,这些控件都是在靠左边显示的。

做法:我们只要在最右边,添加一个HorizontalSpacer即可,然后这个Spacer(就相当于一个控件)跟前面的几个控件组成一个横向的布局。

  

  1. 像第3个块内容里三个PushButton,我们希望在主界面拉大的时候,这些控件都是在靠右边显示的。

做法:我们只要在最左边,添加一个HorizontalSpacer即可,然后这个Spacer(就相当于一个控件)跟前面的几个控件组成一个横向的布局。

  1. 固定大小,在第1块内容里面,LineEdit控件默认是随着窗体变宽而变宽的,(高度默认是固定大小的)。但实际情况下,有时候,有这样需求,我们不希望LineEdit是固定大小的,不要随着窗体变大而变大。

做法:

选择LineEdit的属性(单选该控件,然后在右下角的属性编辑器)

这里minimumSize是指当界面缩小时,最小的值。

如果此值=maximumSize的值,那么就是固定大小了,不管界面怎么变都是这个值。

如果此值<maxmumSize,那么就是说控件会随着界面变化;在minimumSize与maxmumSize之间变化,这就是我们常见一般界面,会随着界面变大而变大,而变大到一定程度就不会再变化了,就是这个道理。

上面说的是横向的拉升,同理,如果纵向拉升也是这样操作。如果纵向跟横向都Fixed,那么就是固定大小了。(有些控件是默认是固定大小的,有些是默认一个方向固定大小的)

反之,如果我们希望我们控件随着界面大小而变化,那么在这两个地方,我们设置成Expanding即可。当然minimumSize、maxmumSize还是跟前面一个道理。

  1. 位置我不想平均分,也不是都靠左边也不是都靠右边。就是说我要3/7分,我要1/9分,等。这种需求我认为不多,一般来说,控件部分是固定位置,部分是随着变化而变化的。

这些比例分配的,都是要在同一个布局内完成,不能跨布局。

例如拿第3块内容来说,我们希望三个按钮在界面的右边1/2,其中“增加”占右边的1/6宽度,“修改”占2/6宽度,“删除”占3/6宽度。

做法:

1. 选择该布局,然后再属性编辑器里找到Layout

2. 在layoutStretch输入数据,注意一个控件一个数字,中间逗号不要弄丢了。0是默认,就是默认控件自身的。这里数字是指总数的几份,例如6,1,2,3 其中6表示6/12的意思,1表示1/12的意思。

效果如下:

同样纵向布局里若要调整比例也是这样操作的。

  1. 布局,控件之间间距太宽,我怎么调整?(边距的设置)

做法:

找到选择该布局,然后再属性编辑器里找到Layout

从上到下,分别是:这个布局与外部布局的左边距、上边距、右边距、下边距(这些是跟外部布局来说的,默认值是9,如果是0表示”紧挨着”。),这个布局内部控件之间的间距(相对内部控件而言,默认值是6)。

每个布局都有这样的独立参数的,因此不要默认9,就得改。

PS:有些子界面,例如是在Widget里面的控件布局边距,可能在属性编辑器的下方,需要下翻到下面!!

好了,基本上我们都学会了常规布局,总结下:

1.     
先设计界面,需要哪些控件、大致放哪里

2.     
然后按一定顺序先一组组布局,例如先横向布局,再纵向(先内部布局)

3.     
每个布局都调整好控件排序,固定大小?靠右边?可以扩展?

4.     
如果纵横比较复杂,可以利用Widget、Frame

 

  1. 最后一点,很重要,就是大的界面布局

a)      
一般界面是Dialog或Widget,一般默认是没有布局

b)      
所以这布局很重要,否则没有效果

c)       
这个布局一定要在前面,布局好之后再弄,否则要重新布局

Qt布局操作的更多相关文章

  1. 浅谈qt 布局器

    在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...

  2. Qt 布局管理器

    在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...

  3. Qt QAxObject操作excel文件过程总结(转):

    正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...

  4. 第六章 Qt布局管理器Layout

    第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...

  5. 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan ...

  6. Qt之操作系统环境

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90102uy9k.html Qt中操作系统环境,官方解释如下: QStringList QProcess::syst ...

  7. qt 布局

    说到qt布局,比起之前用的MFC好了许多,而且qt支持qss,可以更好的美化界面.qt提供了几种常见的布局管理 窗体布局,这对客户端程序来说是一个福音,再也不用操心程序界面放大缩小时界面控件怎么变化, ...

  8. 初识Qt布局管理器

    Qt布局管理器的类有4种,它们分别为QHBoxLayout.QVBoxLayout.QGridLayout和QStackLayout.其中,QHBoxLayout实现水平布局,QVBoxLayout实 ...

  9. Qt之操作数据库(SQLite)实例

    QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持.QSqlDatabase对象象征了数据库的关联.Qt使用驱动 ...

随机推荐

  1. Angularjs 2 绝对零基础的教程(1):从安装配置开始

    写在前面 适合人群: 1. 愿意未来从事前端工作,并以此开拓自己未来职业 2. 有任何一种编程语言基础 3. 喜欢简单粗暴学一门实用的技术,而不是做科研. Angular 2 比 Angular 1 ...

  2. 【liferay】3、liferay 添加spring支持

    1.添加对应的spring的jar 地址:https://spring.io/projects 选中springframework 进入git源码的地方,看简介 我们需要编译好的jar 当然也可以自己 ...

  3. Java的按位操作符

    本文参考:Java的位操作符 Java的位操作符用来操作整数基本数据类型中的单个"比特"(bit),即代进制位.而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作. ...

  4. Python之旅本地环境搭建

    刚开始学习Python, 之后将会把Python相关的一些学习在此记录下来 . 毋庸置疑 ,我们需要先搭建本地开发环境, 为之后的Python开发做准备 ,这篇文章 ,将环境的搭建记录下来 第一步: ...

  5. 什么是ObjCTypes?

    先看一下消息转发流程: 在forwardInvocation这一步,你必须要实现一个方法: - (NSMethodSignature *)methodSignatureForSelector:(SEL ...

  6. Upgrade with the Gradle Wrapper, gradlew升级

    springboot 2.0需要gradle 1+, 而自动构建的都是3.+,手动升级如下 Upgrade with the Gradle Wrapper If your existing Gradl ...

  7. 删除链表中间节点和a/b处的节点

    [题目]: 给定链表的头节点 head,实现删除链表的中间节点的函数. 例如: 步删除任何节点: 1->2,删除节点1: 1->2->3,删除节点2: 1->2->3-& ...

  8. Aspects 源码学习

    AOP 面向切面编程,在对于埋点.日志记录等操作来说是一个很好的解决方案.而 Aspects 是一个对于AOP编程的一个优雅的实现,也可以直接借助这个库来使用AOP思想.需要值得注意的是,Aspect ...

  9. ReSharper 全教程

    Resharper系列 更多关于Resharper的介绍 参考我之前的文章: Resharper 详细教程 提升ReSharper和Visual Studio的性能 Visual Studio中使用R ...

  10. 让 MyBatis Generator 变的更简单

    MyBatis 是一个 Java 的 ORM 框架,ORM 的出现就是为了简化开发.最初的开发方式是业务逻辑和数据库查询逻辑是分开的,或者在程序中编写 sql 语句,或者调用 sql 存储过程.这样导 ...