QLayout窗口布局
本文标题:QLayout窗口布局 本文地址:http://techieliang.com/2017/12/690/
1. 介绍
QLayout
| Header: | #include <QLayout> |
| qmake: | QT += widgets |
| Inherits: | QObject and QLayoutItem |
| Inherited By: | QBoxLayout, QFormLayout, QGridLayout, and QStackedLayout |
涉及到的控件主要有:QSplitter窗口分割器、QSpacerItem间距控制(类似于弹簧效果)、QHBoxLayout(1行n列)和QVBoxLayout(n行1列)行列布局、QFormLayout表单布局(n行2列)、QGridLayout栅格布局(n行n列)
addWidget(QWidget *w)、removeWidget(QWidget *widget)? QWidget操作
setSpacing(int spacing) setHorizontalSpacing(int spacing) setVerticalSpacing(int spacing)设置间距
1.1. QSpacerItem
在使用Designer时,就是Spacers里面的行列spacer,弹簧样式的图标,此控件添加以后不会在界面显示,主要是占位使用。任何layout默认是先符合控件的sizePolicy的要求下进行控件大小、间距调整。
但如果想要实现类似于程序标题栏的效果,左侧图标、程序名,右侧最大化、最小化关闭按钮,中间就需要一个占位的空白控件,这时候需要使用QSpacerItem。
在Designer时,直接拖拽到需要占位的地方(注意,两个空间之间或者布局之间均可,但其所在空间必须是QLayout而不是QWidget)
代码使用:使用addSpacerItem(QSpacerItem *spacerItem)、insertSpacerItem(int index, QSpacerItem *spacerItem)、removeItem(QLayoutItem *item)
addSpacing(int size)这类方法是设置间距而不是插入spaceritem
spacerItem父类是QLayoutItem,直接removeQLayoutItem 即可删除,同理可以使用removeItem(QLayoutItem *item)、
1.2. QHBoxLayout、QVBoxLayout
其父类为QBoxLayout,可以配合QSpacerItem使用
1.3. QFormLayout
n行两列表单,提供了一套insertRow、removeRow、addRow的方法,此类默认第一列为QLabel,支持第一列只提供字符串而不提供QLabel对象
表单换行策略
setRowWrapPolicy(RowWrapPolicy policy)
| Constant | Value | Description |
|---|---|---|
QFormLayout::DontWrapRows |
0 |
一直在一行Fields are always laid out next to their label. This is the default policy for all styles except Qt Extended styles. |
QFormLayout::WrapLongRows |
1 |
自适应,如果空间不够则两行Labels are given enough horizontal space to fit the widest label, and the rest of the space is given to the fields. If the minimum size of a field pair is wider than the available space, the field is wrapped to the next line. This is the default policy for Qt Extended styles. |
QFormLayout::WrapAllRows |
2 |
一直两行Fields are always laid out below their label. |
setWidget(int row, ItemRole role, QWidget *widget)
不使用addrow一类的整行添加,也可以逐个添加,使用此函数需要设置ItemRole
| Constant | Value | Description |
|---|---|---|
QFormLayout::LabelRole |
0 |
标签列A label widget. |
QFormLayout::FieldRole |
1 |
输入框列A field widget. |
QFormLayout::SpanningRole |
2 |
单控件占用整行A widget that spans label and field columns. |
1.4. QGridLayout
适用于复杂布局
- void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
- void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
- void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
- void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
注意row,column为起点位置,rowSpan,columnSpan表示占用的行数,类似于excel中的合并单元格效果
- void setColumnStretch(int column, int stretch)
- void setRowStretch(int row, int stretch)
- void setHorizontalSpacing(int spacing)
- void setVerticalSpacing(int spacing)
设置伸缩空间和间距
1.5. QStackedLayout
堆布局,这个布局实现widget分页显示,Qt提供了他的一个控件QStackedWidget
1.6. QSplitter
实现窗口分割效果,且可以动态调整比例
setOpaqueResize(bool opaque = true) 在调整比例时是否动态更新
setChildrenCollapsible(bool) 是否允许子窗口为0尺寸
addWidget(QWidget *widget)、insertWidget(int index, QWidget *widget) 添加窗口
注意是窗口分割 不是布局分割,所以不能支持布局的添加
QLayout窗口布局的更多相关文章
- 06--Qt窗口布局
Qt窗口布局 标签: qtlayout 2012-05-05 07:56 3076人阅读 评论(0) 收藏 举报 分类: Qt开发(33) 版权声明:本文为博主原创文章,未经博主允许不得转载. 布 ...
- VS2013中如何更改主题颜色(深色)和恢复默认的窗口布局
1.通常情况下,我们会根据个人爱好更改VS2013的主题颜色,一开始我喜欢白色,后来我偏爱深色. 依次选择:工具->选项->常规->主题->深色->确定,ok 2.我们在 ...
- 保持plsql窗口布局
在window菜单中有个 save layout 项,设置好窗口布局后,选一下此项就保存你当前的窗口布局了,下次启动就不用再设置了.
- IDEA如何重置窗口布局
如何重置窗口布局 我不知道怎么搞的,左边的,上边的,下边的,视图都没有了 , 重启了一下,然后重置为默认视图,就好了
- IDEA的窗口布局设置
修改idea的窗口布局 idea默认的窗口模式是如: 可以通过File->Appearance->Window Options->勾选 Widescreen tool window ...
- Visual Studio 重置窗口布局
Visual Studio 重置窗口布局
- Window窗口布局 --- DecorView浅析
开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局,我们知道,页面都是依附在窗口之上的,而DecorView即 ...
- JavaFX--第3天窗口布局
1.windows之间的交互 2.关闭程序 3.布局镶嵌 1.windows之间的交互 我们要实现“确定”.“取消”之类的功能:就像我们平时使用Word的时候要关闭会提示要不要保存的信息. 步骤如下: ...
- QT+动手设计一个登陆窗口+布局
登陆窗口的样式如下: 这里面涉及着窗口的UI设计,重点是局部布局和整体布局, 首先在ui窗口上添加一个容器类(Widget),然后将需要添加的控件放置在容器中,进行局部布局(在进行局部布局的时候可以使 ...
随机推荐
- centos验证码图片无法加载的问题
首先确认是否安装imagemagick 更改此文件 $ vim /etc/ImageMagick/policy.xml 找到此行 <policy domain="coder&qu ...
- 微信小程序 request请求封装
在utils文件夹新建文件utils.js,封装代码如下: 小程序升级后内部不自带Promise方法,需外部引入Promise方法 var sendRequest = function (url, ...
- SQL学习笔记:基础教程
SQL语法 在表中选择列 select 列名 from 表名 选择所有列 select * from 表名 返回唯一值 select distinct 列名 from 表名 where select ...
- 【 C 】字符串常量
当一个字符串常量出现在表达式中时,它的值是个指针常量.编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针.但是,当数组名用于表达式中时,它们的值也是个指针常量.我们可以 ...
- Hadoop学习(二) Hadoop配置文件参数详解
Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2.6.4. etc/hadoop/core-site.xm ...
- 20155315 2016-2017-2 《Java程序设计》第二周学习总结
教材学习内容总结 在教材中,有一句话叫做 伪代码是最好的注释. 一开始我不理解什么是伪代码,但在参考了百度和C语言的学习过程后,我发现伪代码的作用就相当于是解决问题前期的流程图设计,伪代码设计好了之后 ...
- 20155327李百乾 Exp3 免杀原理与实践
20155327李百乾 Exp3 免杀原理与实践 实践guocheng 一.Msfvenom使用编码器 1.利用(virustota)[https://www.virustotal.com/]检测实验 ...
- 课下测试CH01补交
课下测试CH01补交 ( 单选题 | 1 分) Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比. A . 正确 B . 错误 正确答案: B 你的答案: 未作答 ...
- 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() { std: ...
- 【转】 线段树完全版 ~by NotOnlySuccess
载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章 ...