当前位置: 首页 > news >正文

70常用控件_QVBoxLayout的使用

目录

代码⽰例: 使⽤ QVBoxLayout 管理多个控件.

代码⽰例: 创建两个 QVBoxLayout

布局管理器
之前使用Qt在界面上创建的控件,都是通过"绝对定位"的方式来设定的.
也就是每个控件所在的位置,都需要计算坐标,最终通过setGeometry或者move方式摆放过去.
这种设定方式其实并不方便,尤其是界面如果内容比较多,不好计算,而且一个窗口大小往往是可以调整
的,按照绝对定位的方式,也无法自适应窗口大小.
因此Qt引入"布局管理器"(Layout)机制,来解决上述问题,
当然, 布局管理器并⾮ Qt 独有. 其他的 GUI 开发框架, 像 Android, 前端等也有类似的机制

垂直布局
使⽤ QVBoxLayout 表⽰垂直的布局管理器. V 是 vertical 的缩写.

核⼼属性
属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutSpacing相邻元素之间的间距

 Layout 只是⽤于界⾯布局, 并没有提供信号.

代码⽰例: 使⽤ QVBoxLayout 管理多个控件.

1) 编写代码, 创建布局管理器和三个按钮. 并且把按钮添加到布局管理器中.
使⽤ addWidget 把控件添加到布局管理器中.
使⽤ setLayout 设置该布局管理器到 widget 中.
2) 运⾏程序, 可以看到此时界⾯上的按钮就存在于布局管理器中. 随着窗⼝尺⼨变化⽽发⽣改变.
此时三个按钮的尺⼨和位置, 都是⾃动计算出来的

通过上述代码的⽅式, 只能给这个 widget 设定⼀个布局管理器. 实际上也可以通过 Qt Design 在⼀个窗 ⼝中创建多个布局管理器.

代码⽰例: 创建两个 QVBoxLayout

1) 在界⾯上创建两个 QVBoxLayout , 每个 QVBoxLayout 各放三个按钮.
2) 运⾏程序, 可以看到这些按钮已经⾃动排列好. 只不过当前这些按钮的位置不能随着窗⼝⼤⼩⾃动变化

 

通过 Qt Designer 创建的布局管理器, 其实是先创建了⼀个 widget, 设置过 geometry 属性
的. 再把这个 layout 设置到这个 widget 中.
实际上, ⼀个 widget 只能包含⼀个 layout.
打开 ui ⽂件的原始 xml, 可以看到其中的端倪.
这种情况下 layout 并⾮是窗⼝ widget 的布局管理器, 因此不会随着窗⼝⼤⼩改变
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建三个按钮, 使用垂直布局管理器管理起来QPushButton* button1 = new QPushButton("按钮1");QPushButton* button2 = new QPushButton("按钮2");QPushButton* button3 = new QPushButton("按钮3");// 创建布局管理器QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(button1);layout->addWidget(button2);layout->addWidget(button3);// 把布局管理器添加到窗口中.this->setLayout(layout);}Widget::~Widget()
{delete ui;
}

 

之前把控件放到界面上,都是靠“手动”的方式来布局的~~
这种手动调整的方式是不科学的!!
1.手动布局的方式非常复杂,而且不精确.
2.无法对窗口大小进行自适应~~
布局管理器~~


Qt中提供了很多种布局管理器~~
1.垂直布局~~
2.水平布局~
3. 网格布局
4. 表单布局


每个widget中只能设置一个布局管理器.


如果在代码中创建layout,其实是只创建了一个layout.
如果在QtDesigner中创建的layout,先创建了一个Widget,然后再在这个新的Widget中添加了一个layout.

layout标签表示的是布局管理器的本体.
外面自动创建出了一个Widget
每个layout里面又可以包含若干个item(也就是一个按钮)

 刚才是先拖了layout过去,然后再往layout中拖其他控件.
也可以先拖其他控件,后给这些控件套上layout~~


把选中的若干控件外头套上一个垂直布局的layout

 

 

相关文章:

  • 基于PHP的扎染文创产品商城
  • 如何在最短时间内提升打ctf(web)的水平?
  • XSS攻击防御全指南:核心防护技巧
  • 多线程3(Thread)
  • serv00 ssh登录保活脚本-邮件通知版
  • SpringSecurity+vue通用权限系统
  • OPENCV图形计算面积、弧长API讲解(1)
  • DBAPI如何优雅的获取单条数据
  • JavaScript 数据类型详解
  • 基于深度强化学习的智能机器人导航系统
  • 骨盆-x光参数
  • Linux多线程-进阶
  • 湖北理元理律师事务所视角:企业债务优化的三维平衡之道
  • 在uniCloud云对象中定义dbJQL的便捷方法
  • 免杀对抗--PE文件结构
  • 大实验:基于赛灵思csg324100T,pmodMAXsonar的危险距离警报
  • NumPy数组访问
  • MySQL从入门到DBA深度学习指南
  • 算法-数论
  • 每日八股文6.8
  • 用dw做网站怎么添加背景图片/高级seo培训
  • 自己给自己网站做seo/下百度安装
  • 做企业网站用什么cms/近期发生的重大新闻
  • 找人做网站需要多少钱/谷歌优化推广
  • 怎么做网站黑链/太原百度seo排名软件
  • 香港网站建设 深圳分公司/seo日常工作内容