版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题: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行两列表单,提供了一套insertRowremoveRowaddRow的方法,此类默认第一列为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

适用于复杂布局

  1. void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
  2. void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
  3. void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
  4. void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

注意row,column为起点位置,rowSpan,columnSpan表示占用的行数,类似于excel中的合并单元格效果

  1. void setColumnStretch(int column, int stretch)
  2. void setRowStretch(int row, int stretch)
  3. void setHorizontalSpacing(int spacing)
  4. 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) 添加窗口

注意是窗口分割 不是布局分割,所以不能支持布局的添加

转载请以链接形式标明本文标题和地址:Techie亮博客 » QLayout窗口布局

QLayout窗口布局的更多相关文章

  1. 06--Qt窗口布局

    Qt窗口布局 标签: qtlayout 2012-05-05 07:56 3076人阅读 评论(0) 收藏 举报  分类: Qt开发(33)  版权声明:本文为博主原创文章,未经博主允许不得转载. 布 ...

  2. VS2013中如何更改主题颜色(深色)和恢复默认的窗口布局

    1.通常情况下,我们会根据个人爱好更改VS2013的主题颜色,一开始我喜欢白色,后来我偏爱深色. 依次选择:工具->选项->常规->主题->深色->确定,ok 2.我们在 ...

  3. 保持plsql窗口布局

    在window菜单中有个 save layout 项,设置好窗口布局后,选一下此项就保存你当前的窗口布局了,下次启动就不用再设置了.

  4. IDEA如何重置窗口布局

    如何重置窗口布局 我不知道怎么搞的,左边的,上边的,下边的,视图都没有了 , 重启了一下,然后重置为默认视图,就好了

  5. IDEA的窗口布局设置

    修改idea的窗口布局 idea默认的窗口模式是如: 可以通过File->Appearance->Window Options->勾选 Widescreen tool window ...

  6. Visual Studio 重置窗口布局

    Visual Studio 重置窗口布局

  7. Window窗口布局 --- DecorView浅析

    开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局,我们知道,页面都是依附在窗口之上的,而DecorView即 ...

  8. JavaFX--第3天窗口布局

    1.windows之间的交互 2.关闭程序 3.布局镶嵌 1.windows之间的交互 我们要实现“确定”.“取消”之类的功能:就像我们平时使用Word的时候要关闭会提示要不要保存的信息. 步骤如下: ...

  9. QT+动手设计一个登陆窗口+布局

    登陆窗口的样式如下: 这里面涉及着窗口的UI设计,重点是局部布局和整体布局, 首先在ui窗口上添加一个容器类(Widget),然后将需要添加的控件放置在容器中,进行局部布局(在进行局部布局的时候可以使 ...

随机推荐

  1. 短连接、长连接、轮询、长轮询、WebSocket

    短连接 建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接 定义:短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送. 应 ...

  2. ios retainCount

    retainCount Important: Typically there should be no reason to explicitly ask an object what its reta ...

  3. 20155330 2016-2017-2 《Java程序设计》第四周学习总结

    20155330 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了 ...

  4. 《Java 程序设计》课堂实践项目-mini dc

    <Java 程序设计>课堂实践项目-后缀表达式 课后学习总结 目录 改变 mini dc实验要求 后缀表达式介绍 课堂实践成果 课后思考 改变 修改了博客整体布局,改变了之前贴个截图粘个代 ...

  5. 1. oracle12C的安装

    官方安装文档:https://docs.oracle.com/database/121/LTDQI/toc.htm#BHCCADGD 1.软件准备 oracle12c.zip 安装包 VMware 虚 ...

  6. 创龙OMAPL138的NMI中断

    1. 不可屏蔽中断部分代码,注册中断函数,6748有几个NMI的引脚? void InterruptInit(void) { // 初始化 DSP 中断控制器 IntDSPINTCInit(); // ...

  7. cogs930找第k小的数(k-th number)

    cogs930找第k小的数(k-th number) 原题链接 题解 好题... 终极版是bzoj3065(然而并不会) 先讲这个题... 维护\(n+1\)个值域线段树(用主席树),标号\(0\) ...

  8. 测试Websocket建立通信,使用protobuf格式交换数据

    接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数.峰值消息数以及长期运行稳定性 整体需求 ...

  9. Siki_Unity_2-3_UGUI_Unity4.6 UI Beta版本入门学习(未学)

    Unity 2-3 UGUI Unity4.6 UI Beta版本入门学习(未学)

  10. windows下sublime text的node.js开发环境搭建

    首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了 ...