码上通QT实战04--主窗体布局

1、前言

在Qt中,主窗体布局通常使用布局管理器(Layout Managers)来实现,确保控件能够随窗体大小变化自动调整。以下是几种常见的布局方法,可以灵活地实现Qt主窗体的布局需求:

使用QHBoxLayout或QVBoxLayout

QHBoxLayout和QVBoxLayout是最基础的布局管理器,分别用于水平和垂直方向的控件排列。通过将控件添加到布局中,再设置为主窗体的布局,可以实现简单的界面设计。

cpp 复制代码
QWidget *mainWidget = new QWidget();
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(new QPushButton("Button 1"));
layout->addWidget(new QPushButton("Button 2"));
mainWidget->setLayout(layout);
mainWidget->show();
使用QGridLayout

QGridLayout适用于更复杂的网格布局,允许控件跨越多个行或列。通过指定行和列的索引,可以精确控制控件的位置。

cpp 复制代码
QWidget *mainWidget = new QWidget();
QGridLayout *layout = new QGridLayout();
layout->addWidget(new QPushButton("Button 1"), 0, 0);
layout->addWidget(new QPushButton("Button 2"), 0, 1);
layout->addWidget(new QPushButton("Button 3"), 1, 0, 1, 2); // 跨越两列
mainWidget->setLayout(layout);
mainWidget->show();
使用嵌套布局

对于更复杂的界面,可以通过嵌套布局实现。例如,将多个水平或垂直布局组合到一个主布局中

cpp 复制代码
QWidget *mainWidget = new QWidget();
QVBoxLayout *mainLayout = new QVBoxLayout();
QHBoxLayout *topLayout = new QHBoxLayout();
QHBoxLayout *bottomLayout = new QHBoxLayout();

topLayout->addWidget(new QPushButton("Top Button 1"));
topLayout->addWidget(new QPushButton("Top Button 2"));
bottomLayout->addWidget(new QPushButton("Bottom Button"));

mainLayout->addLayout(topLayout);
mainLayout->addLayout(bottomLayout);
mainWidget->setLayout(mainLayout);
mainWidget->show();
使用QMainWindow

QMainWindow是Qt中用于主窗体的类,提供了菜单栏、工具栏、状态栏和中心部件的支持。中心部件可以设置为任何QWidget,并通过布局管理器管理其子控件。

cpp 复制代码
QMainWindow *mainWindow = new QMainWindow();
QWidget *centralWidget = new QWidget();
QVBoxLayout *layout = new QVBoxLayout();

layout->addWidget(new QPushButton("Button 1"));
layout->addWidget(new QPushButton("Button 2"));
centralWidget->setLayout(layout);
mainWindow->setCentralWidget(centralWidget);
mainWindow->show();
使用QFormLayout

QFormLayout适用于表单类型的布局,通常用于标签和输入框的配对显示。可以快速创建整齐的表单界面.

cpp 复制代码
QWidget *mainWidget = new QWidget();
QFormLayout *layout = new QFormLayout();
layout->addRow("Name:", new QLineEdit());
layout->addRow("Age:", new QLineEdit());
mainWidget->setLayout(layout);
mainWidget->show();
注意事项
  • 布局管理器会自动处理控件的尺寸和位置,避免手动设置几何属性。
  • 使用setSizePolicy可以调整控件在布局中的行为,例如扩展或固定大小。
  • 嵌套布局时,注意层级关系以避免布局混乱。

本项目布局采用QMainWindow嵌套布局实现

2、开始干

先看一下原来自动生成的布局,自动生成的菜单及状态条必须删除。

1、整体布局采用左右两列

Widget 概述

Widget(微件)是用户界面中的小型组件或应用程序,通常用于显示特定信息或提供简单交互功能。常见于桌面、移动设备或网页,能够快速访问常用功能(如天气、时钟、日历等),无需打开完整应用。

常见类型

桌面 Widget

嵌入操作系统桌面,如 Windows 的天气工具或 macOS 的通知中心插件。

移动 Widget

iOS 的"今日视图"或 Android 的主屏幕小组件,支持快速查看日程、步数等。

网页 Widget

嵌入网站的小工具,如聊天窗口、搜索栏或社交媒体插件。

设计原则

  • 简洁性:聚焦核心功能,避免复杂交互。
  • 实时性:定期更新数据(如股票行情)。
  • 可定制化:允许用户调整尺寸或内容偏好。

通过合理设计,Widget 能显著提升用户体验效率。

上面的图标就是水平布局,在Qt中,水平布局(QHBoxLayout)是一种常用的布局管理器,用于将控件按水平方向排列。

调整布局的边距通常可以通过以下方式实现,具体取决于使用的布局类型和需求。

通过设置左侧widget的宽度实现调整范围

2、左侧导航布局

QLabel 的基本用法

QLabel 是 Qt 框架中用于显示文本或图像的控件,支持富文本、超链接和动态内容。

注意事项

  • 若需频繁更新图像,建议使用 QPixmap::load() 替代重复创建对象。
  • 富文本渲染可能影响性能,复杂场景建议改用 QTextEdit
  • 默认情况下,QLabel 不会自动换行,需通过 setWordWrap(true) 启用。

弹簧控件Space的基本用法

在Qt中,verticalSpacer 是一种用于布局管理的组件,通常用于在垂直布局(QVBoxLayout)中填充空白区域或调整控件之间的间距,可以通过拖拽"Spacer"组件到布局中创建垂直间隔器。选择"Vertical Spacer"后,将其放置在布局的顶部、底部或控件之间,用于自动调整间距。

注意事项

  • 间隔器不参与信号/槽机制,仅用于布局管理。
  • 在复杂布局中,结合 QHBoxLayout 和嵌套布局可实现更灵活的界面设计。
  • 避免过度使用间隔器,优先考虑布局的拉伸因子(setStretch)实现类似效果。

3、CSS中的盒子模型

CSS 盒子模型(Box Model)是QT布局的核心概念,用于描述元素在页面中的占位方式。每个元素被抽象为一个矩形盒子,由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。

盒子模型的组成部分

  • 内容(Content):元素的实际内容区域,显示文本或子元素。
  • 内边距(Padding):内容与边框之间的透明空间,控制内容与边框的距离。
  • 边框(Border):围绕内容和内边距的线条,可设置样式、颜色和宽度。
  • 外边距(Margin):盒子与其他元素之间的透明空间,控制盒子间的距离。

4、运行测试

复制代码
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,请动动你的金手指,祝您早日实现财务自由。
相关推荐
leiming61 天前
c++ qt开发第一天 hello world
开发语言·c++·qt
奋斗者1号1 天前
MQTT连接失败定位步骤
开发语言·机器学习·网络安全
33三 三like1 天前
毕设任务分析
开发语言
vyuvyucd1 天前
Linux线程编程:POSIX与C++实战指南
java·开发语言
Kratzdisteln1 天前
【MVCD 3】
开发语言·php
癫狂的兔子1 天前
【Python】【NumPy】random.rand和random.uniform的异同点
开发语言·python·numpy
先做个垃圾出来………1 天前
Python整数存储与位运算
开发语言·python
leiming61 天前
c++ find_if 算法
开发语言·c++·算法
广州服务器托管1 天前
[2026.1.6]WINPE运维版20260106,带网络功能的PE维护系统
运维·开发语言·windows·计算机网络·个人开发·可信计算技术