文章目录

  • 1 Qt中的QBoxLayout
    • 1.1 QBoxLayout
    • 1.2 布局管理器的嵌套

1 Qt中的QBoxLayout

1.1 QBoxLayout

QBoxLayout布局管理器:

  • 以水平或者垂直的方式管理界面组件。



布局管理器中的比例系数:

  • 默认情况下以等比例的方式更新组件的大小。
  • 可以自定义组件大小更新时的比例系数。

QBoxLayout中的比例系数设置:

注意: 组件的初始大小是独立于布局管理器设置的,因此不能保证组件的大小始终符合比例系数的设置。

垂直布管理器示例代码:

void Widget::testVBoxLayout()
{QVBoxLayout* layout = new QVBoxLayout();TestBtn1.setText("Test Button 1");TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn1.setMinimumSize(160, 30);TestBtn2.setText("Test Button 2");TestBtn2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn2.setMinimumSize(160, 30);TestBtn3.setText("Test Button 3");TestBtn3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn3.setMinimumSize(160, 30);TestBtn4.setText("Test Button 4");TestBtn4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn4.setMinimumSize(160, 30);layout->setSpacing(30);layout->addWidget(&TestBtn1);layout->addWidget(&TestBtn2);layout->addWidget(&TestBtn3);layout->addWidget(&TestBtn4);layout->setStretch(0, 1);layout->setStretch(1, 1);layout->setStretch(2, 2);layout->setStretch(3, 2);setLayout(layout);
}

水平布局管理器示例代码:

void Widget::testHBoxLayout()
{QHBoxLayout* layout = new QHBoxLayout();TestBtn1.setText("Test Button 1");TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn1.setMinimumSize(160, 30);TestBtn2.setText("Test Button 2");TestBtn2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn2.setMinimumSize(160, 30);TestBtn3.setText("Test Button 3");TestBtn3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn3.setMinimumSize(160, 30);TestBtn4.setText("Test Button 4");TestBtn4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn4.setMinimumSize(160, 30);layout->setSpacing(30);layout->addWidget(&TestBtn1);layout->addWidget(&TestBtn2);layout->addWidget(&TestBtn3);layout->addWidget(&TestBtn4);layout->setStretchFactor(&TestBtn1, 1);layout->setStretchFactor(&TestBtn2, 2);layout->setStretchFactor(&TestBtn3, 1);layout->setStretchFactor(&TestBtn4, 3);setLayout(layout);
}

1.2 布局管理器的嵌套

布局管理器可以相互嵌套,形成更加复杂的布局方式:

  • 布局嵌套几乎可以完成所有常用的界面布局。
  • 自定义布局类可以达到个性化界面布局的效果。

QBoxLayout嵌套实例:

布局管理器的相互嵌套示例代码:

void Widget::testVHBoxLayout()
{QHBoxLayout* hLayout1 = new QHBoxLayout();QHBoxLayout* hLayout2 = new QHBoxLayout();QVBoxLayout* vLayout = new QVBoxLayout();TestBtn1.setText("Test Button 1");TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn1.setMinimumSize(160, 30);TestBtn2.setText("Test Button 2");TestBtn2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn2.setMinimumSize(160, 30);hLayout1->setSpacing(10);hLayout1->addWidget(&TestBtn1);hLayout1->addWidget(&TestBtn2);TestBtn3.setText("Test Button 3");TestBtn3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn3.setMinimumSize(160, 30);TestBtn4.setText("Test Button 4");TestBtn4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);TestBtn4.setMinimumSize(160, 30);hLayout2->setSpacing(10);hLayout2->addWidget(&TestBtn3);hLayout2->addWidget(&TestBtn4);vLayout->setSpacing(10);vLayout->addLayout(hLayout1);vLayout->addLayout(hLayout2);vLayout->setStretchFactor(hLayout1, 1);vLayout->setStretchFactor(hLayout2, 3);setLayout(vLayout);
}

思考一个问题:当使用了布局管理器后,如何设置组件的初始化大小呢?


参考资料:

  1. QT实验分析教程

Qt中的QBoxLayout相关推荐

  1. QT 中QTimer 和 startTimer()的区别

    最需要注意一点 请注意,QTimer的准确性取决于底层操作系统和硬件.timerType参数允许您自定义计时器的准确性.有关不同计时器类型的信息,请参见Qt::TimerType.大多数平台支持20毫 ...

  2. QT 中使用 OpenCv 的 CascadeClassifier 报错

    问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fa ...

  3. 【Qt】Qt中使用ssl时报错:qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method

    一.问题 在Qt中使用https,运行时报错: qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method 二.原因分析 SSLv2由 ...

  4. Qt中两种定时器用法

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObj ...

  5. Qt中的 Size Hints 和 Size Policies

    sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...

  6. Qt中使用多线程的一些心得(一)——继承QThread的多线程使用方法

    一 前言 二Qt多线程方法一 继承QThread 2.1使用多线程的原因分析 2.2 写一个继承于QThread的线程 三 总结 一 前言   本篇文章部分内容参考了该博文:传送门.   Qt中有两种 ...

  7. C++中的stack类、QT中的QStack类

    C++中的stack 实现一种先进后出的数据结构,是一个模板类. 头文件 #include<stack> 用法(以int型为例): stack <int> s; //定义一个i ...

  8. Qt中不规则窗体和部件的实现

    Qt中不规则窗体和部件的实现 描述:a.png 窗口背景图 图片: 描述:mask.png 窗口掩码图 图片: 描述:toolbutton.png 按钮背景图 图片: 描述:toolbutton_ma ...

  9. QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置

    QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置 参考文章: (1)QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置 (2)https:// ...

最新文章

  1. 接口是什么意思_程序员天天用却不懂得冷知识,这两句口诀,让你理解RESTful接口...
  2. AngularJs 基础教程​ —— Select(选择框)
  3. Linux 防火墙命令的操作命令CentOS
  4. 线程同步锁 java_java多线程同步之重入锁,详细解析
  5. redis基本命令list
  6. xp 设备管理器 android,XP设备管理器怎么打开?
  7. java me基础教程 pdf_Java ME手机应用开发技术与案例详解 PDF
  8. 新玩法来了,web前端教程公众号推出《每日一题》
  9. 红皮书--调试及修复
  10. div和span标签(HTML)
  11. 线段树——I hate it
  12. HIVE中常见文件存储格式比较
  13. Phase2 Day11 Set Map
  14. Android Layout 布局属性全解
  15. DCOM配置出错: 不小心删除DCOM配置中,“我的电脑”属性的Everyone权限导致......
  16. ABAP里面的OCCURS与HEADER LINE之间的一些区别
  17. [SAP ABAP开发技术总结]增强Enhancement
  18. bzoj3123【SDOI2013】森林
  19. Adobe acrobat修改批注名字
  20. 高德地图之添加遮盖物

热门文章

  1. android到顶部,Android recyclerview滚动到顶部
  2. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第6章-一阶时滞多智能体系统分组一致性
  3. python基础1(来自廖雪峰的官方网站)
  4. 计算机课四年级说课稿,小学信息技术说课稿
  5. 雷达篇(九)雷达中的“快采样”和“慢采样”
  6. 阿里巴巴成立首个IoT生态联盟 将打通技术标准
  7. spring-retry----线程内重试
  8. Swift - static和class的使用
  9. SQLServer表内自关联级联删除
  10. 键盘样式风格有关设置-iOS开发