Qt布局管理详解

详解 QT 布局管理界面 图文并茂

QT主要布局管理器分类

QHBoxLayout(水平布局)

把子窗口从左到右排列在一个水平行上。

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);window->setLayout(layout);
window->show();

运行结果:

QVBoxLayout(垂直布局)

把子窗口从上到下排列在一个垂直列上。

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);window->setLayout(layout);
window->show();

运行结果:

QGridLayout(表格布局)

把子窗口排列在一个二维的网格中,窗口可占据多个单元格。
QGridLayout::addWidget()语法:
layout->addWidget(widget, row, column, rowSpan, columnSpan);

widget:为插入到这个布局的子控件;
(row,column)为控件占据的左上角单元格位置;
rowSpan是控件占据的行数,colunmSpan是控件占据的列数。
(rowSpan和colunmSpan默认值为1)

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");QGridLayout *layout = new QGridLayout;
layout->addWidget(button1, 0, 0);
layout->addWidget(button2, 0, 1);
layout->addWidget(button3, 1, 0, 1, 2);
layout->addWidget(button4, 2, 0);
layout->addWidget(button5, 2, 1);window->setLayout(layout);
window->show();

运行结果:

Stacked Layouts(分组布局)

QStackedLayout类把子控件进行分组或者分页,一次只显示一组或者一页,隐藏其他组或者页上的控件。
接口:

int addWidget(QWidget * widget)
添加页面,并返回页面对应的索引

int count() const
获取页面数量

int currentIndex() const
获取当前页面的索引

QWidget * currentWidget() const
获取当前页面

int indexOf(QWidget * widget) const
获取QWidget页面所对应的索引

int insertWidget(int index, QWidget * widget)
在索引index位置添加页面

void removeWidget(QWidget * widget)
移除QWidget页面,并没有被删除,只是从布局中移动,从而被隐藏。

QWidget * widget(int index) const
获取索引index所对应的页面

Form Layout布局设置(表格布局)

专门用于管理输入控件和与之相关的标签等表单布局,QFormLayout固定为两列布局,并针对表单做了建模,配套了一堆方便使用的函数。网格布局器的基本单元是单元格,而表单布局器的基本单元是行。表单布局器是高度建模并封装的,它没有 addWidget()和 addLayout()之类的函数,它只有addRow()函数。表单布局器中一行的空间可以由多个控件占据,也可以由一个控件占据。

QSpliter分割器的作用

分裂器 QSplitter 是一个实体功能控件,它的基类是 QFrame,QFrame 基类正是 QWidget。QSplitter 可以独立存在,可以作为父窗口容纳多个子控件,分裂器会完全拥有内部的子控件。在 Qt 设计师或 QtCreator 设计模式左边 Widget Box 里面没有分裂器可以拖动,使用分裂器的方式是:选中已有的控件,然后点击上面工具栏的水平分裂器或垂直分裂器按钮。比如上图是将三个丰富文本编辑器作为一个水平分裂器排布 的。分裂器内每个控件都有一个手柄 Handle,水平分裂器内控件的手柄在左边,垂直分裂器内控件的手柄在控件上方。第 0 个控件的手柄是永久隐藏的,分裂器自身占据的大矩形四个边界线通常不能拖动拉大,只能拖动控件之间的手柄,比如上图的手柄 1 和 手柄 2 。分裂器整体的尺寸不是用户控制的,而在分裂器内部的控件尺寸可以让用户手工拖动手柄来控制。在程序运行时,水平分裂器内各个控件的宽度、垂直分裂器内部各个控件的高度, 一般都是用户拖动手柄控制,这是分裂器和布局器最大的不同。

QT中有三种方式对窗体上的控件进行布局管理:绝对位置定位(absolute positioning),手工布局(manual layout),布局管理器(layout managers)

绝对位置定位(控件布局是固定位置,没有自适应功能)

手工布局给出控件的绝对位置,但是他们的尺寸根据窗口的大小确定,可以通过重写窗体控件的resizeEvent()实现对子控件的大小设置。

布局管理器,运用QHBoxLayout、QVBoxLayout、QGridLayout、QFormLayout、QStackLayout等布局。

QT 常用布局管理器相关推荐

  1. QT:布局管理器消息盒子对话框

    让组件在水平和垂直方向对齐 有三种常用布局管理器: 水平,QHBoxLayout 垂直,QVBoxLayout 网格,QGridLayout(使布局好的界面嵌套到主窗口) 1.让组件大小固定 修改属性 ...

  2. java常用布局管理器(流布局管理器、边界布局管理器、网格布局管理器)

    在Swing中,每个组件在容器中都有一个具体的位置大小.而在容器中摆放各种组件时很难判断其具体位置和大小,使用布局管理器比程序员直接在容器中控制Swing组件的位置和大小方便得多,可以更加有效地处理整 ...

  3. Java GUI编程的几种常用布局管理器

    Java GUI编程的几种常用布局管理器 本人是一个大二的学生.因为最近有做JavaGUI界面的需求,因此重新开始熟悉JavaGUI的各种控件和布局.然后以次博文为笔记,总结.完善以及发表最近学习的一 ...

  4. Qt 使用布局管理器失效或者异常

    1.使用布局管理器失效 继承与mainwindow或者再mainwindow的窗口,使用布局管理器将不起作用. mainwindow窗口有自己的布局管理方式,mainwindow中有个中心部件. 如果 ...

  5. 【JAVA】-- Java五大常用布局管理器(BorderLayout、FlowLayout、GridLayout、GridBagLayout、CardLayout)

    在Swing组件中,有JFrame和JDialog这样的顶级容器(也叫窗口),顶级容器不能放置在其他容器中,可完成窗口大小化等基本功能. 也有JPanel这样的面板组件,比较复杂的布局,需要布局管理器 ...

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

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

  7. pyqt 控件焦点_PyQt5(2)——调整布局(布局管理器)第一个程序

    我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...

  8. Java可视化编程,基于布局管理器的UI设计

    在<事件驱动模型>讲述了如何将用户与功能实现代码联系到一起.怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析,站在用户角度上分析UI各组件倒底该如何设计呈现. 优秀的UI会 ...

  9. 【Qt】Qt布局管理器

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

最新文章

  1. 不用ajax 后台的异步实现,js 怎么避免重复的异步操作(不问了,目前没办法后台做到,只能改造前端了)...
  2. Hibernate 简介(百度)
  3. .Net(一):再识面向对象之C#学习总结
  4. 大数据之Oozie——源码分析(一)程序入口
  5. 用C#实现将html文件转换为chm文件
  6. 遗传算法(Genetic Algorithm,GA)实例详解
  7. 【保险类项目】开发必须了解知道的概念 / 术语
  8. Maven的作用通俗介绍
  9. 【读书笔记】《天才在左 疯子在右》
  10. 电影光盘的vob格式视频如何转换成mp4格式
  11. java:熊怪吃核桃
  12. groovy if 判断字符串_Groovy语法
  13. 没有目标的人叫流浪,有目标的人叫航行
  14. 通用的综合大数据数据可视化展示html页面源码
  15. Java编程思想读书笔记——初始化与清理(二)
  16. 服务器主机和显示器怎么连接,主机跟显示器怎么连接
  17. 北京联合大学聋人计算机,北京联合大学特教学院成人聋障大学生永不言弃
  18. orb-slam3:优化状态量是camera坐标系下RPV还是body坐标系下RPV探究
  19. Centos升级助手
  20. VARCHART XGantt系列教程:如何利用颜色来丰富甘特图智能

热门文章

  1. 教你把网页甚至网站制作成chm,pdf,epud
  2. VC++的链接错误LNK2005
  3. 文艺复兴(C++)造房子
  4. 微软公司2010年度十大新闻
  5. Java的IO模型基于网络编程利弊分析
  6. Redis键空间通知(Keyspace Notifications)
  7. Region proposals 是什么?如何提取?
  8. floor、ceiling和round函数
  9. 谷歌?亲斤手不推荐 选它就对了
  10. English Learning - Day29 作业打卡 2023.1.5 周四