转自:https://blog.csdn.net/sabcdefg/article/details/106693203

在分析之前,先吐槽下M$的MFC,竟然没有相对布局!(至少我不知道,每次都是使用代码控制布局),
M$这么多年,也不发展一下,你看C#都有相对布局...

参考精通Qt4编程(第2版),先看看总体的布局图

然后看看代码

CLoginDlg::CLoginDlg(QWidget* parent/* = NULL */) : QDialog(parent)
{//QGridLayoutusrLabel = new QLabel(tr("用户名:"));pwdLabel = new QLabel(tr("密  码:"));usrLineEdit = new QLineEdit;pwdLineEdit = new QLineEdit;pwdLineEdit->setEchoMode(QLineEdit::Password);gridLayout = new QGridLayout;gridLayout->addWidget(usrLabel, 0, 0, 1, 1);gridLayout->addWidget(usrLineEdit, 0, 1, 1, 3);gridLayout->addWidget(pwdLabel, 1, 0, 1, 1);gridLayout->addWidget(pwdLineEdit, 1, 1, 1, 3);//QHBoxLayoutokBtn = new QPushButton(tr("确定"));cancelBtn = new QPushButton(tr("取消"));btnLayout = new QHBoxLayout;btnLayout->setSpacing(60);btnLayout->addWidget(okBtn);btnLayout->addWidget(cancelBtn);//QVBoxLayoutdlgLayout = new QVBoxLayout;dlgLayout->setMargin(40);dlgLayout->addLayout(gridLayout);dlgLayout->addStretch(40);dlgLayout->addLayout(btnLayout);setLayout(dlgLayout);connect(okBtn, SIGNAL(clicked()), this, SLOT(accept()));connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));setWindowTitle(tr("登录"));resize(300, 200);
}

这里面一共有3个布局QGridLayout/QHBoxLayout/QVBoxLayout
看看QGridLayout

局管理器gridLayout中的具体位置,其中前两个实参分别表示行和列的位置(行号和列号),后两个参数分别表示行的跨度和列的跨度
gridLayout->addWidget(usrLineEdit, 0, 1, 1, 3);
QHBoxLayout/QVBoxLayout比较简单,一个是水平的排,一个是垂直的排

运行代码,结果如下:

为了方便看,我做了标识,然后放大窗口,又做了标识


图中的40,就是这行代码的功劳:dlgLayout->setMargin(40);
60是这行代码的功劳:btnLayout->setSpacing(60);
还有一行代码dlgLayout->addStretch(40),作如下解释:

函数QVBoxLayout::addStretch()函数在垂直布局管理器dlgLayout对象中加入一个大小为40的stretch,这将使得布局管理器gridLayout和btnLayout之间的默认距离设置为40,同时当上下拉伸对话框的高度时,该stretch可以自由伸缩,从而保证gridLayout和btnLayout管理器内部各窗口部件的高度以及彼此间的垂直距离保持不变。

以上,由于代码比较简单,大家也能一目了然吧.
可以看出,字体大小并不会随着窗口的变大而变大(当然控件的高度也没有变).

文章备份地址:https://netpt.net/forum.php?mod=viewthread&tid=37

承接Windows/Linux桌面应用开发(C/C++),专业coding10年+,值得信赖.
VC/MFC/QT
QQ:13571089

【转】QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析!!相关推荐

  1. 1QPushButton的使用,QLineEdit的使用,设置组件位置,布局(QHBoxLayout,QGridLayout)

     1.新建一个空Qt项目 2 新建一个新的文件(右击项目à添加新文件) 3 配置pro文件属性 SOURCES += \ main.cpp QT += widgets gui 4 编写main.c ...

  2. 15.QT布局管理及示例

    Qt布局系统包含一组布局管理类,当界面变化时,布局系统会自动定位和调整窗口的大小,从而确保控件始排列整齐并确保界面可用. 所有QWidget子类都可以使用布局管理类. QWidget::setLayo ...

  3. 【Qt】Qt布局管理器

    00. 目录 文章目录 00. 目录 01. 概述 02. 布局相关类 03. 布局图示 04. 为布局添加控件 05. 伸展因素 06. 布局中自定义控件 07. 手动布局 08. 附录 01. 概 ...

  4. Qt 布局(水平、垂直、网格)

    开发一个图形界面应用程序,界面的布局影响到界面的美观.在设计一个界面之前,应该考虑到开发的界面可能给不用的用户使用,而用户的屏幕大小.纵横比例.分辨率可能不同,界面还可能是可缩放的,程序应该可以适应这 ...

  5. 【QT】QT从零入门教程(十):QT布局管理QLayout

      介绍完常用控件之后,我们发现,之前控件的大小位置都是通过resize().move()来设置的,很不方便,当你修改某个控件的位置时,其他控件也需要进行调整,容易出现牵一发而动全身的情况.   QT ...

  6. qt布局嵌套_Qt的5种常用布局搭建

    Qt布局详解: 界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置.那么做出来的界面才看起来美观. 那么如何对界面进行布局呢?Qt提供了一些类负责排列窗体上的控件,主要有 ...

  7. Android L Settings 简要分析

    1.本文说明 本文主要针对L平台上Settings模块正常启动流程做一个简要分析,并试着分析一下Settings下面Storage选项的实现过程. 2.Settings概览 在之前的KK平台上Sett ...

  8. Android 5.1 Settings源码简要分析

    概述: 先声明:本人工作快两年了,仍是菜鸟级别的,惭愧啊!以前遇到好多知识点都没有记录下来,感觉挺可惜的,现在有机会接触Android 源码.我们一个Android组的搞Setting,我觉得是得写得 ...

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

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

最新文章

  1. linux驱动:i2c驱动(二)
  2. 如何在 Linux 上录制你的终端操作
  3. Python中numpy库unique函数解析
  4. [ ZooKeeper]ZooKeeper 的功能和原理
  5. 使用ueditor实现多图片上传案例——Dao层(IShoppingDao)
  6. python cls_关于python中的self,ins , cls的解释
  7. [bzoj3676]回文串[后缀数组+Manacher]
  8. MATLAB+三对角矩阵
  9. 全国计算机等级考试——C语言二级 题库
  10. tablau desktop注册码本地停用虚拟机激活
  11. 《跨界杂谈》(信息)安全
  12. 1MB是多少字节 ?是多少位?
  13. Sword38——字符串的排列
  14. 读取采购订单附件(GOS)-[BDS_GOS_CONNECTIONS_GET/SO_DOCUMENT_READ_API1]
  15. Maya照明大师班:成为渲染专家
  16. WPF导出发布安装包,无法验证发行者解决办法
  17. Linux - samba实现Linux与windows文件共享——共享文件夹目标文件访问权限被拒绝解决方案(超详细,看不懂你怪我)
  18. maven java_home
  19. ssm+java+vue基于微信小程序的美容院管理系统#毕业设计
  20. Clickhouse单机部署以及从mysql增量同步数据

热门文章

  1. 为有朝一日自己弄个玩具玩而准备
  2. HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面 详细错误:HTTP 错误...
  3. JS-为金额添加千分位逗号分割符
  4. 好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界
  5. EBS业务学习之应付INVOICE类型
  6. faker和劫的图片_faker亲手画的劫被曝光,看到他的画,众人心里久久不能平息!...
  7. 801. 二进制中1的个数
  8. java实现gdal栅格矢量化,《GDAL源码剖析与开发指南》一一1.5 GDAL源码目录
  9. aix oracle监听配置_AIX系统中安装ORACLE,客户端连接时,监听会宕掉的问题
  10. 法那科机器人初始化启动_发那科机器人的控制方式和控制柜的启动方式