申明:本文转载自“黄邦勇帅(原名:黄勇)

Qt布局管理(1):部件拉伸(Stretch)原理及大小策略(sizePolicy)

1、部件的大小策略sizePolicy、大小限制、拉伸因子(Stretch Factors)的含义
部件的大小策略、大小限制、拉伸因子从三个方面对布局内的部件怎样进行拉伸以填满布局进行了说明。
拉伸因子描述了各个部件在进行拉伸时,多个部件之间应以怎样的比例进行拉伸,比如把按钮1、按钮2、按钮3的拉伸因子分别为设置为1,2,3,则按钮将按1:2:3的大小进行拉伸以填满整个布局空间(见图5-1)。注意:当主窗口的大小不能按计算出来的比例容纳下所有子部件时,子部件不一定会按设计好的比例进行排列。

大小策略规定了部件以何种方式进行拉伸及压缩,比如部件不能被拉伸或压缩,部件不能被压缩得比大小提示更小等。
部件的大小限制限制了部件可以被拉伸或压缩的范围,比如不能把部件压缩得比最小大小更小,或不能拉伸得比最大大小更大等。
2、QWidget类中对部件大小进行限制的属性

3、设置拉伸因子的函数

4、设置大小策略


5、大小策略与拉伸因子之间的关系
若部件的拉伸因子大于0,则按照拉伸因子的比例分配空间;若拉伸因子为0,则只有在其他部件不需要空间时才会获得空间;也就是说若一些部件拉伸因子大于0,而一些部件拉伸因子为0,则只有拉伸因子大于0的部件会被拉伸,而拉伸因子为0的部件不会被拉伸。
若所有部件的拉伸因子都为0,则按照大小策略的规则对部件进行拉伸。
注意:若部件的大小策略为Fixed,则即使设置了拉伸因子,该部件也不会被拉伸。
以上规则可总结为,拉伸因子会使大小策略不起作用或失效(除了Fixed策略外)
除QSizePolicy::Ignored外,任何部件,都不能压缩得比最小大小更小(若未设置最小大小,则为最小大小提示),任何部件都不能拉伸得比最大大小更大。
示例5.1:大小限制对大小策略的影响

#include<QtWidgets>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){    QApplication a(argc,argv);
QWidget w;      QPushButton *pb=new QPushButton("Fixed");
QPushButton *pb1=new QPushButton("MaxSetMin");       QPushButton *pb2=new QPushButton("MaxNoMin");
//为部件设置大小策略
pb->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
pb1->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Fixed);
pb2->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Fixed);
QHBoxLayout *pg=new QHBoxLayout;
pb->resize(222,222);     //使用布局后,resize函数将不再起作用
pb->setMinimumWidth(11);     pb->setMaximumWidth(188);   //为pb设置最大/最小大小
pb1->setMinimumWidth(1);    //为pb1设置最小大小
pg->addWidget(pb);       pg->addWidget(pb1);      pg->addWidget(pb2);      w.setLayout(pg);
w.resize(300,200);       w.show();    return a.exec();      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行结果及说明见图5-6

示例5.2:部件的优先扩展权

#include<QtWidgets>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){    QApplication a(argc,argv);QWidget w;       QPushButton *pb=new QPushButton("Preferred");QPushButton *pb1=new QPushButton("Expanding");   //该部件具有优先扩展权pb->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);pb1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);QHBoxLayout *pg=new QHBoxLayout;    pg->addWidget(pb);    pg->addWidget(pb1);w.setLayout(pg);   w.resize(300,200);       w.show();    return a.exec();  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果及说明见图5-7

示例5.3:拉伸因子与大小策略的关系

#include<QtWidgets>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){    QApplication a(argc,argv);QWidget w;       QPushButton *pb=new QPushButton("Preferred");QPushButton *pb1=new QPushButton("Expanding");    QPushButton *pb2=new QPushButton("xxx");QPushButton *pb3=new QPushButton("Ignore");pb->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);pb1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);pb2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);pb3->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Fixed);QHBoxLayout *pg=new QHBoxLayout;
pg->addWidget(pb);       pg->addWidget(pb1);
pg->addWidget(pb2);      pg->addWidget(pb3);
//拉伸因子应位于addWidget()之后,否则拉伸因子将不起作用,设置拉伸因子后扩展优先权将不起作用。pg->setStretch(0,1);      pg->setStretchFactor(pb1,3);    pg->setStretch(3,2);
w.setLayout(pg);    w.resize(300,100);        w.show();    return a.exec();     }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行结果及说明见图5-8

Qt布局管理--部件拉伸(Stretch)原理及大小策略(sizePolicy)相关推荐

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

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

  2. C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园

    C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园 下面我们以一个例子来初步了解Qt的组件定位技术,比如我们想做一个登录窗口,像下图这样,应该怎么做呢? 这还不简单嘛,在窗体上拖两个QLabe ...

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

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

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

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

  5. 【Qt】Qt布局管理器

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

  6. Qt布局管理器之表单布局(QFormLayout)

    QFormLayout顾名思义,主要用来做表单的输入及显示.和前面讲到的QBoxLayout.QGridLayout类似,QFormLayout可以插入widget.layout,直接用QGridLa ...

  7. QT 常用布局管理器

    Qt布局管理详解 详解 QT 布局管理界面 图文并茂 QT主要布局管理器分类 QHBoxLayout(水平布局) 把子窗口从左到右排列在一个水平行上. QWidget *window = new QW ...

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

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

  9. Python布局管理器

    使用步骤: 创建sizers布局管理器 调用SetSizer()将布局管理器添加到容器中 调用Add()将组件添加到布局管理器中 调用Fit()计算计算布局布局管理器和容器窗口的大小 #-*- cod ...

最新文章

  1. 网络安全中的AI:2021年的六个注意事项
  2. rabbitmq 限制速度_技术干货分享:RabbitMQ消息积压的几种解决思路
  3. 显著增加bash交互舒适度的.inputrc
  4. python错误解决方案之关于报urllib2.HTTPError: HTTP Error 401: Unauthorized错误问题
  5. 成功解决Fit Failed Warning: Estimator fit failed. The score on this train-test partition for these param
  6. Serverless 实战 —— Funcraft OSS ROS 进行 CI/CD
  7. python不会英语不会数学怎么自学-数学不好、英语不好、非本专业,想学Python数据分析,能安排吗?...
  8. Android编译系统介绍
  9. 阿里云中获取文件及目录列表的方法
  10. UITextField的leftView
  11. CAN FD:测量和重编程
  12. 手写字体研究-matlab
  13. 课堂派题库格式转换程序
  14. 便携式三星mysql_三星折叠手机终于来了!9 月 18 日正式发售
  15. 软件模拟SPI接口程序代码
  16. EXPDP、IMPDP规范及常用技巧总结
  17. jacoco—增量代码覆盖率实现
  18. uni-app iOS发布
  19. jar包反编译工具(java-decompiler)
  20. 计算机数值模拟仿真技术的优点,数值模拟的优缺点优点.ppt

热门文章

  1. 核心单词Word List 10
  2. 深度信念网络_理论优美的深度信念网络,Hinton老爷子北大最新演讲
  3. 手把手教你闪图怎样在线制作?
  4. 郭德纲关于打人事件致社会各界的道歉书。(挺你!!)
  5. java获取字符串占用的字节大小,以及不同编码下一个汉字占用的字节数
  6. QUI操作超时弹出登录窗口登录的处理方式
  7. android实现左拉菜单,Android原生侧滑控件DrawerLayout使用方法详解
  8. Vivado [Place 30-574]
  9. 电脑卖场 WIN7 SP1 x86 旗舰版 V201306 (IE9)【蓝天科技】
  10. HTTP协议漫谈 C#实现图(Graph) C#实现二叉查找树 浅谈进程同步和互斥的概念 C#实现平衡多路查找树(B树)...