Qt之手动布局
手动布局,可以实现和水平布局、垂直布局、网格布局等相同的效果,也可实现属于自己的自定义布局,当窗体缩放时,控件可以随之变化。
其对于坐标系的建立有严格要求,纯代码思维,使用复杂,不易维护,所以一般不建议使用。
下面我们以简单的例子来讲解如何使用。
在Qt之布局管理器一节中,我们介绍了对于手动布局的实现思路。
通过QWidget::resizeEvent()来计算所需要分配的大小,并且给每个子控件调用setGeometry()。
我们先简单看一个简略图,是一个一个垂直布局的界面,包含各个部位的组成以及大小限制。
其中Left Margin、Top Margin、Right Margin、Bottom Margin分别指各个控件距离窗体的左、上、右、下外边距,Spacing指控件之间的间距。
// 设置按钮位置 m_pButton- move(width() - m_pButton- width() - nRight, height() - nBottom - m_pButton- height()); // 中央窗体位置、大小 m_pCentralWidget- setGeometry(nLeft, nTop + nSpacing + m_pLabel- height(), width() - nLeft - nRight, height() - nTop - 2 *nSpacing - m_pLabel- height() - m_pButton- height() - nBottom); }
标签和中央窗体的宽度均为:width() - nLeft - nRight,即:窗体宽度 - 左边距 - 右边距。
标签的坐标为QPoint(nLeft, nTop),即:x为左边距,y为上边距。
中央窗体的坐标为:QPoint(nLeft, nTop + nSpacing + m_pLabel- height()),即:x:左边距,y:上边距 + 间距 + 标签高度。
中央窗体的高度为:height() - nTop - 2 nSpacing - m_pLabel- height() - m_pButton- height() - nBottom。即:窗体高度 - 上边距 - 标签高度 - 按钮高度 - 下边距 - 2 间距。
按钮大小为:QSize(75, 25),即:width:75,height:25。
按钮位置:QPoint(width() - m_pButton- width() - nRight, height() - nBottom - m_pButton- height())。即:x:窗体宽度 - 按钮宽度 - 右边距,y:窗体高度 - 按钮高度 - 下边距。
//m_pLeftButton- move(nLeft, nTop); //m_pCentralButton- move(nLeft + m_pLeftButton- width() + nSpacing, nTop); //m_pRightButton- move(nLeft + m_pLeftButton- width() + m_pCentralButton- width() + 2 * nSpacing, nTop); // 居右 m_pRightButton- move(width() - m_pRightButton- width() - nRight, nTop); m_pCentralButton- move(width() - m_pCentralButton- width() - m_pRightButton- width() - nSpacing - nRight, nTop); m_pLeftButton- move(width() - m_pLeftButton- width() - m_pCentralButton- width() - m_pRightButton- width() - 2 * nSpacing - nRight, nTop); }
好了,关于网格布局或其他复杂布局就不再一一介绍了,主要计算好各个控件的相对坐标即可。
有人肯定会有疑惑,为什么不使用setGeometry(10, 10, 100, 75),而必须通过resizeEvent()来计算坐标呢?
主要区别:
setGeometry(10, 10, 100, 75)采用绝对坐标和位置,适用于窗体大小固定的情况。一旦大小发生变化,则无计可施。
resizeEvent()计算坐标属于相对位置,无论窗体如何变化,都可以适应其在窗体中的布局。
QT TextEdit控件 全面详解 本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
相关文章
- QT-多线程重要概念及与界面之间交互总结(混淆点分析:c#中可以在子线程中创建ui控件,qt中不能在子线程中创建ui控件)
- MFC和QT等UI框架的特点
- Qt-5种布局控件详解
- Qt 之 消息机制和事件讲解
- Qt自定义事件实现及子线程向主线程传送事件消息
- 【QT】Qt creator连接MySQL数据库 - 增删改查
- 【QT】对于Qt MSVC 2017无法编译的问题解决
- 【QT】Qt 5 的程序:打印文档
- 基于QT(C++)设计门诊叫号系统【100010709】
- Qt编写物联网管理平台37-逻辑设计
- Qt编写安防视频监控系统55-布局方案
- Qt编写安防视频监控系统48-视频参数
- Qt音视频开发14-mpv读取和控制
- Qt编写的项目作品5-物联网管理平台
- Qt编写安防视频监控系统12-异形布局
- Install Qt 5 on Ubuntu(使用qt-opensource-linux-x64-5.7.0.run进行安装,而且是官方的wiki)
- Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)
- Qt之自定义布局管理器(QFlowLayout)
- Qt之图形(QPainterPath)
- Qt之QTableView添加复选框(QAbstractTableModel)
- Qt error:QtThese QT version are inaccessible
- Qt编程之UI与控件布局