第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout
大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置。当用户改变窗口的大小,组件还静静地呆在原来的位置,这有时候显然不是很科。所以Qt提供一种机制-布局,解决了这个问题。只要把组件放入某一种布局之中,当需要调整大小或位置的时候,Qt就知道该怎样进行调整。
下面举一个简单例子:
1 #include <QApplication> 2 #include <QWidget> 3 #include <QSpinBox> 4 #include <QSlider> 5 #include <QHBoxLayout> 6 7 int main(int argc, char *argv[]) 8 { 9 QApplication a(argc, argv); 10 QWidget w = new QWidget; 11 w.setWindowTitle("Enter your age"); 12 13 QSpinBox *spinBox = new QSpinBox; 14 QSlider *slider = new QSlider(Qt::Horizontal); 15 spinBox->setRange(0, 130); 16 slider->setRange(0, 130); 17 18 QObject::connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int))); 19 QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); 20 21 spinBox->setValue(35); 22 23 QHBoxLayout *layout = new QHBoxLayout; 24 layout->addWidget(spinBox); 25 layout->addWidget(slider); 26 w.setLayout(layout); 27 28 w.show(); 29 30 return a.exec(); 31 }
编译运行结果(直接改变窗体大小,看组件的变化):
Qt一共有5种主要的layout,分别是:
水平布局
垂直布局
使用分裂器水平布局
使用分裂器垂直布局
栅格布局
下面使用Qt Creator的designer对垂直布局进行举例,其他布局的使用方法类似。
1.在左边的器件栏里拖入三个PushButton和一个Vertical Layout(垂直布局管理器)到中心面板。如下图。
2.将这三个按钮放入垂直布局管理器,效果如下。可以看到按钮垂直方向排列,并且宽度可以改变,但高度没有改变。
3.我们将布局管理器整体选中,按下上面工具栏的Break Layout按钮,便可取消布局管理器。(我们当然也可以先将按钮移出,再按下Delete键将布局管理器删除。)
4.下面我们改用分裂器部件(QSplitter)。
先将三个按钮同时选中,再按下上面工具栏的Lay Out Vertically in Splitter(垂直分裂器)。
效果如下图。可以看到按钮的大小可以随之改动。这也就是分裂器和布局管理器的分别。
5.其实布局管理器不但能控制器件的布局,还有个很重要的用途是,它能使器件的大小随着窗口大小的改变而改变。
我们先在主窗口的中心拖入一个文本编辑器Text Edit。
这时直接运行程序,效果如下。可以看到它的大小和位置不会随着窗口改变。
下面我们选中主窗口部件,然后在空白处点击鼠标右键,选择Layout->Lay Out in a Grid,使整个主窗口的中心区处于网格布局管理器中。
可以看到,这时文本编辑器已经占据了整个主窗口的中心区。
运行一下程序,可以看到无论怎样拉伸窗口,文本编辑框的大小都会随之改变。
转载于:https://www.cnblogs.com/heguoyuan/p/4279294.html
第六章 Qt布局管理器Layout相关推荐
- C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园
C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园 下面我们以一个例子来初步了解Qt的组件定位技术,比如我们想做一个登录窗口,像下图这样,应该怎么做呢? 这还不简单嘛,在窗体上拖两个QLabe ...
- 【Qt】Qt布局管理器
00. 目录 文章目录 00. 目录 01. 概述 02. 布局相关类 03. 布局图示 04. 为布局添加控件 05. 伸展因素 06. 布局中自定义控件 07. 手动布局 08. 附录 01. 概 ...
- Java Swing布局管理器
引言 在使用 Swing 向容器添加组件时,需要考虑组件的位置和大小.如果不使用布局管理器,则需要先在纸上画好各个组件的位置并计算组件间的距离,再向容器中添加.这样虽然能够灵活控制组件的位置,实现却非 ...
- java中什么是布局管理器_Java中布局管理器
布局管理器种类 FlowLayout: 组件在一行中从左至右水平排列,排满后折行,它是Panel.Applet的默认布局管理器. BorderLayout:北.南.东.西.中,它是Window.Fra ...
- Java Swing的布局管理器
在Swing的实际开发中,开发人员在添加组件到容器中的时候可以自由调整组件的大小和在容器中的位置,这样虽然很灵活,但操作起来却很麻烦.为了加快开发速度,Java 提供了一些布局管理器,它们可以将组件进 ...
- 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面
使用布局管理器,来设计一个登陆界面 都是操作,没代码没理论.参照:Qt设计一登陆窗口布局 1. 新建空工程 双击.ui文件,进入界面设计区. 我们新建工程时候,使用的是QMainWindow类,会自动 ...
- Qt 使用布局管理器失效或者异常
1.使用布局管理器失效 继承与mainwindow或者再mainwindow的窗口,使用布局管理器将不起作用. mainwindow窗口有自己的布局管理方式,mainwindow中有个中心部件. 如果 ...
- Qt 内存管理与布局管理器
一.new与delete 在C++学习中,new与delete必须成对使用,防止内存泄漏,可是在学习Qt时,我发现很多new,而却几乎找不到delete.在网上搜索得知:Qt完善了C++的内存管理机制 ...
- QT 常用布局管理器
Qt布局管理详解 详解 QT 布局管理界面 图文并茂 QT主要布局管理器分类 QHBoxLayout(水平布局) 把子窗口从左到右排列在一个水平行上. QWidget *window = new QW ...
最新文章
- php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法
- python3.5.2-python升级 (2.6升级到3.5)
- java课设电子门禁_Door门禁系统.doc
- 深度学习数学知识(持续补充)
- python计算最大回撤_Python进阶量化交易场外篇3——最大回撤评价策略风险
- Android 高效的`InjectView – ButterKnife`
- 学习java多线程,这必须搞懂的这几个概念
- 简述MapReduce执行过程?
- 贝叶斯网络的应用实例一
- 利用python炒股talib_TaLib在股票技术分析中的应用
- .net反编译工具Reflector下载(转)
- python杀掉某个指定的进程
- 一元二次方程极简新解法
- 小红书算法sign php,小红书API签名算法分析
- 关于M1版Macbook Pro 安装JDK 方法
- SSM家庭理财个人理财管理系统记账系统
- 通过Thinsys瘦客户机连接ProxmoxVE平台登录虚拟机
- 区块链的应用领域——数字版权(四)
- java jdom 读取xml文件_使用Jdom读取XML文件方法
- Oracle数据库解决NULL值不走B树索引
热门文章
- C++ 11 深度学习(五)类型转换:static_cast dynamic_cast const_cast reinterpret_cast
- 群晖 上传 源文件不存在_群晖NAS连接百度网盘报错?原因是这样的
- php通知多有人,PHP通知抑制;只有某些情况/方法
- mysql内部损坏_mysql表损坏故障案例
- linux 几个文件夹作用,linux下每一个文件夹的作用.docx
- 前端如何实现网络速度测试功能_分析Web前端测试要点,从架构原理上进行分析,希望大家能够掌握...
- java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能
- [渝粤教育] 西北大学 仪器分析 参考 资料
- 【渝粤教育】 广东开放大学 21秋期末考试物业经营管理实务10123k2
- 红米ac2100breed看模块_骁龙865加持,红米K30S至尊纪念版11日再开售