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

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. c语言数组本质,c语言数组的本质
  2. VS2010 无法调试、断点 的解决方法
  3. wdlinux 安装apc扩展
  4. [Python图像处理] 三十四.数字图像处理基础与几何图形绘制万字详解(推荐)
  5. OrderAnalyticsController.initializeCachedDB - jdbc
  6. 一键发布到Maven Central的方法
  7. c#扫描图片去黑边(扫描仪去黑边)
  8. java中stack集合框架
  9. linux如何设置mac快捷键,在Ubuntu上使用macOS的快捷键
  10. SpringBoot执行器端点Actuator Endpoint
  11. html 13 背景
  12. Linux Mount命令浅解
  13. 如何使用组策略提升Windows系统性能
  14. 转:使用Android API最佳实践
  15. powerbi使用说明_Power BI入门教程
  16. i710750h和r74800h玩游戏哪个好 r7 4800h和i7 10750h哪个性能好
  17. unity中单位是米还是厘米_cm在单位里是厘米还是毫米
  18. 51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎)
  19. 安全事件日志事件编号与描述
  20. FrontEnd笔记 -- JavaScript

热门文章

  1. 抖音开启“学浪计划”,想要学习的我却决定卸载了
  2. 选择“食品装箱机”应该考虑的几个方面
  3. java 拆箱与装箱原理
  4. html鼠标右键功能,检查鼠标右键功能
  5. Qualcomm 常用NV列表
  6. 2023计算机毕业设计SSM最新选题之java丢失宠物发布找寻平台7nk4i
  7. iOS银联ApplePay控件开发
  8. Unix系统 - 进程管理
  9. 那些关于前端数据结构与算法
  10. 简单左拉菜单栏-css+js