简述

QBoxLayout可以在水平方向或垂直方向上排列控件,由QHBoxLayout、QVBoxLayout所继承。

QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。 
QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。

通过查看源码,我们可以发现,水平布局、垂直布局除了构造时的方向(LeftToRight、TopToBottom)不同外,其它均相同。

下面我们以QHBoxLayout为例,来讲解QBoxLayout的常用功能。

  • 简述
  • 使用
    • 效果
    • 源码
  • 常用接口
  • 总结

使用

下面介绍下水平布局的基本使用。

效果

源码

下面,我们创建5个按钮,然后添加至水平不居中。

QPushButton *pButton1 = new QPushButton("One");
QPushButton *pButton2 = new QPushButton("Two"); QPushButton *pButton3 = new QPushButton("Three"); QPushButton *pButton4 = new QPushButton("Four"); QPushButton *pButton5 = new QPushButton("Five"); QHBoxLayout *pHLayout = new QHBoxLayout(); pHLayout->addWidget(pButton1); pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5); setLayout(pHLayout);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

常用接口

我们可以看到,默认的外边距为0,为了美观性我们可以设置下Margin。

  • setMargin(int)
  • setContentsMargins(int left, int top, int right, int bottom);
  • setContentsMargins(const QMargins &margins) 
    设置外边距

setMargin可以设置左、上、右、下的外边距,设置之后,他们的外边距是相同的。 
setContentsMargins与其功能相同,但是可以将左、上、右、下的外边距设置为不同的值。

这里我使用setMargin(10)将外边距设置为10。


  • setSpacing(int) 
    设置间距

一般情况下,会有一个默认间距值,为了保持所有布局的统一性,或者你需要一个更合适的间距值,则需要手动设置。

这里我使用setSpacing(0)将间距设置为0。


  • addStretch() 
    添加了一个伸缩空间(QSpacerItem)。

居右

在第一个控件之前添加伸缩,这样所有的控件就会居右显示。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();  // 添加伸缩 pHLayout->addWidget(pButton1); pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

居左

在最后一个控件之后添加伸缩,这样所有的控件就会居左显示。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addWidget(pButton1);
pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5); pHLayout->addStretch(); // 添加伸缩
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

居中

在第一个控件之前、最后一个控件之后添加伸缩,这样所有的控件就会居中显示。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();  // 第一个控件之前添加伸缩 pHLayout->addWidget(pButton1); pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5); pHLayout->addStretch(); // 最后一个控件之后添加伸缩 pHLayout->setSpacing(10);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

均分

在每一个控件之间都添加伸缩,这样所有的控件之间的间距都会相同。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();
pHLayout->addWidget(pButton1); pHLayout->addStretch(); pHLayout->addWidget(pButton2); pHLayout->addStretch(); pHLayout->addWidget(pButton3); pHLayout->addStretch(); pHLayout->addWidget(pButton4); pHLayout->addStretch(); pHLayout->addWidget(pButton5); pHLayout->addStretch(); pHLayout->setSpacing(0);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

  • addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = 0) 
    添加控件

默认的,我们添加控件至水平布局中,默认都是垂直方向居中对齐的。

例如:

其中有控件大小不相同的时候就会看得很明显了,如果我们需要将其中的某些控件居上、居下显示,那么可以使用对齐方式Qt::Alignment。

下面,我们使用向上、向下对齐来设置其它控件。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();
// 水平居左 垂直居上 pHLayout->addWidget(pButton1, 0 , Qt::AlignLeft | Qt::AlignTop); pHLayout->addWidget(pButton2, 0 , Qt::AlignLeft | Qt::AlignTop); pHLayout->addWidget(pButton3); // 水平居左 垂直居下 pHLayout->addWidget(pButton4, 0 , Qt::AlignLeft | Qt::AlignBottom); pHLayout->addWidget(pButton5, 0 , Qt::AlignLeft | Qt::AlignBottom); pHLayout->setSpacing(10);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  • setDirection(Direction) 
    设置布局方向

可以设置从左到右、从右到左、从上到下、从下到上等。。。

setDirection(QBoxLayout::RightToLeft)

setDirection(QBoxLayout::TopToBottom);

既然使用了QHBoxLayout,一般就不建议使用TopToBottom或者BottomToTop,如果实在确定不了方向,或者方向可以随意变化,那么建议使用QBoxLayout。


  • setStretchFactor(QWidget *w, int stretch);
  • setStretchFactor(QLayout *l, int stretch); 
    设置控件、布局的拉伸系数

当窗体大小变化时,控件会根据拉伸系数来做相应的调整。

setStretchFactor(pButton1, 1); 
setStretchFactor(pButton2, 2);

设置pButton1的拉伸系数为1,pButton2拉伸系数为2,当窗体变大时,会优先将pButton2进行拉伸,当达到一定程度时,再拉伸pButton1,pButton1与pButton2的宽度比例为1:2。

总结

上面介绍了基本所有常用的接口使用,还有一些inset…接口,和它们功能相同,只不过是需要传递控件所在的索引index。常用的这些接口掌握了,其它布局QVBoxLayout、QGridLayout功能也相同或类似,一通百通

转载于:https://www.cnblogs.com/lifan3a/articles/7795177.html

Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)相关推荐

  1. 【转】QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析!!

    转自:https://blog.csdn.net/sabcdefg/article/details/106693203 在分析之前,先吐槽下M$的MFC,竟然没有相对布局!(至少我不知道,每次都是使用 ...

  2. 【CSS】水平垂直布局

    [CSS]水平垂直布局 文章目录 [CSS]水平垂直布局 一.水平布局 (1)行内元素 (2)块级元素 给要居中的块级元素设置 margin: 0 auto; 要居中的块级元素:left + marg ...

  3. 【“零起点”--百度地图手机SDK】如何添加地图图层+按钮事件+水平垂直布局?...

    摘要:我们在这一章将学习到如何通过按钮事件来控制地图图层(交通流量图,卫星图)的显示,以及如何对android应用进行水平和垂直布局. -------------------------------- ...

  4. 水平+垂直布局-css (借鉴)

    1. 水平居中 方法一:margin:0 auto; (最常用的居中布局方式) 方法二:text-align和inline-block的结合(设置父元素的text-align为center). 这种方 ...

  5. 【Qt】水平和垂直布局

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 水平布局常用方式 04. 水平布局常用设置 4.1 设置外边距 4.2 设置间距 4.3 添加伸缩空间 4.4 添加控件 ...

  6. Qt水平布局,垂直布局和嵌套布局 layout

    布局是一个软件质量重要的一方面,体现了软件设计的水平,一个好的软件必然有个好的布局. Qt中有水平布局:QHBoxLayout 垂直布局:QVBoxLayout 现在我们有这样一个需求,我们希望有三个 ...

  7. Qt 垂直布局 (QVBoxLayout)

    Qt 垂直布局 (QVBoxLayout) 上一节说了水平布局:https://blog.csdn.net/weixin_42837024/article/details/82114258 QVBox ...

  8. flex布局水平垂直 垂直_垂直和水平装饰

    flex布局水平垂直 垂直 装饰器模式是在不更改其接口的情况下向对象添加功能的最佳方法之一. 我经常使用可组合装饰器,并且总是会问自己在功能列表必须可配置时如何正确设计它们. 我不确定我的答案是否正确 ...

  9. qt动态添加窗口到垂直布局

    引言 程序运行的过程中根据需要动态的创建窗口,没创建一个窗口,就加入列表中,使其竖直展示各个窗口.这样的操作实际是没创建一个窗口,就将其加入到垂直布局中,当点击不同的窗口时能够实现对被点击串钩的区分, ...

最新文章

  1. WindowsServer2012史记7-茴香豆的五种写法和四种”显示计算机”的方法
  2. 训练和验证准确性_通过沉浸式虚拟现实观察动作增强运动想象训练
  3. Hive应用:外部分区表
  4. python 函数装饰器学习
  5. CF1253F Cheap Robot
  6. 用随机梯度下降来优化人生
  7. ABB机器人VGT文件_ABB机器人与焊机之间通讯方式
  8. 【U-Net】【粗读】U-Net: Convolutional Networks for Biomedical Image Segmentation
  9. Angular / RxJs我应该何时退订`Subscription`
  10. java线程 锁_Java多线程(二) 多线程的锁机制
  11. php gd实现简单图片验证码与图片背景文字水印
  12. 2021-03-04
  13. 初中计算机课件flash,初中信息技术FLASH基础知识-PPT课件
  14. SEO过程中外链的误区
  15. 考研数学第三章复习:曲率、曲率圆、曲率半径
  16. 天下大事做于细,从零实施ERP
  17. docker logs查看日志
  18. 计算机卡慢解决方法,电脑很卡怎么办,详细教您电脑很卡很慢应该怎么解决
  19. Excel VBA-正则表达式汇总
  20. 代理模式(静态代理和动态代理)

热门文章

  1. 以太网性能测试仪应该具备什么功能?
  2. 后端技术:Java 泛型 T,E,K,V的含义,看完本文你就明白了?
  3. 大型分布式存储方案MinIO介绍,看完你就懂了!
  4. 项目测试基础:黑盒测试相关知识笔记
  5. 计算机硬件:关于CPU的12个硬核干货!
  6. an导入html5,H5-FLASH:AN HTML5-BASED FLASH RUNTIME
  7. ul1977标准_UL 1977连接器认证知识
  8. jakob slam_Jakob Nielsen针对用户界面设计的第二种可用性启发法
  9. Android 使用jtds远程访问数据库
  10. Jenkins配置Findbugs做源代码安全扫描