news 2026/3/12 23:13:38

【UI Qt】入门笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【UI Qt】入门笔记

目录

1、Qt 主要版本发展历程

2、各版本详细对比表

3、底层库对比

4、Qt基类

5、举例

6、QApplication与窗口关联


1、Qt 主要版本发展历程

版本

发布年份

主要特点

当前状态

Qt 1

1995

第一个公开版本,仅支持 Unix/X11

已淘汰

Qt 2

1999

引入信号槽机制,支持 Windows

已淘汰

Qt 3

2001

引入 Qt Designer,模块化设计

已淘汰

Qt 4

2005

完全重写,LGPL 授权,跨平台成熟

维护到 2015年

Qt 5

2012

QML/Qt Quick 为核心,移动端支持

维护到 2025年5月

Qt 6

2020

现代化架构,C++17,3D 集成

当前主版本

Qt 7

预计 2025+

预计下一代版本

开发中

├── 4.8/ # Qt 4.8.7 最后版本
├── 5.15/ # Qt 5.15 LTS
├── 6.5/ # Qt 6.5 LTS
└── 6.7/ # 最新稳定版

2、各版本详细对比表

特性

Qt 4

Qt 5

Qt 6

C++ 标准

C++98

C++11

C++17

GUI 架构

QWidget 为主

QWidget + Qt Quick

Qt Quick 为主

移动平台

不支持

完整支持

优化支持

3D 支持

有限

Qt 3D 模块

集成 Qt 3D

Web 渲染

QtWebKit

Qt WebEngine

Qt WebEngine

构建系统

qmake 为主

qmake + CMake

CMake 为主

Python 绑定

PyQt4

PyQt5/PySide2

PyQt6/PySide6

最小内存

~8-12 MB

~15-25 MB

~20-30 MB

发布大小

~50-100 MB

~200-300 MB

~300-500 MB

模块数量

~20

~50+

~60+

Qt Quick 本质是 C++ 库:所有 QML 最终都被编译/解释为 C++ 调用
完全可以用纯 C++ 开发:但代码会冗长,失去 QML 的声明式优势
最佳实践是混合使用:
界面布局、样式、简单交互 → QML(快速开发)
业务逻辑、数据处理、高性能组件 → C++(性能、复用)
Qt Quick 不是只能写 QML:QML 只是 Qt Quick 的一种使用方式,不是唯一方式
C++ 提供最大控制和性能:对于专业应用,C++ 是必不可少的

3、底层库对比

层次

QWidget 使用

Qt Quick 使用

差异影响

语言

C++

QML + JavaScript + C++

QML 用于 UI,逻辑可用 C++/JS

渲染后端

QPainter (软件/CPU)

Scene Graph (GPU)

性能差距巨大

图形 API

可选的 OpenGL/DirectX

强制 GPU 加速

Qt Quick 必须硬件加速

动画引擎

QVariantAnimation 等

内置的动画系统

集成度不同

事件循环

主线程事件循环

多线程渲染

Qt Quick 不阻塞 UI

4、Qt基类

Qt 是一个庞大的框架,包含许多基类。以下是一些最重要的基类及其作用:

  1. QObject

    作用:Qt 对象模型的基类,提供了信号与槽机制、事件处理、对象树管理、动态属性、元对象系统等核心功能。重要性:几乎所有的 Qt 类都直接或间接继承自 QObject,它是 Qt 框架的基石。
  2. QWidget

    作用:所有用户界面界面元素的基类,用于创建窗口和控件。它继承自 QObject 和 QPaintDevice,提供了绘制、事件处理、布局、样式等 GUI 相关功能。重要性:所有窗口部件(按钮、标签、对话框等)都直接或间接继承自 QWidget。
  3. QPaintDevice

    作用:可以用 QPainter 绘制的对象的抽象基类。例如,QWidget、QImage、QPixmap、QOpenGLPaintDevice 等都是 QPaintDevice 的子类。重要性:提供了 Qt 绘图系统的基础。
  4. QWindow

    作用:表示底层窗口的类,继承自 QObject 和 QSurface。它提供了与平台无关的窗口表示,通常用于在不需要控件(QWidget)的情况下直接管理窗口。重要性:是 QWidget 的底层基础,也可用于纯 OpenGL 渲染。
  5. QEvent

    作用:所有事件类的基类。Qt 的事件系统用于处理用户输入、定时器、窗口系统事件等。重要性:事件处理是 Qt 应用程序响应用户操作和系统事件的核心机制。
  6. QCoreApplication / QGuiApplication / QApplication

    作用:应用程序类,分别用于非 GUI 应用、基于窗口的 GUI 应用和基于控件(Widget)的 GUI 应用。它们管理应用程序的生命周期、事件循环、命令行参数等。重要性:每个 Qt 应用程序都必须有一个应用程序对象,它是事件循环的起点。
  7. QThread

    作用:线程类,用于多线程编程。它提供了创建、启动、管理和同步线程的方法。重要性:使得在 Qt 中进行并发编程成为可能。
  8. QIODevice

    作用:所有输入输出设备的基类,例如 QFile、QTcpSocket、QSerialPort 等都继承自 QIODevice。它提供了读写数据的统一接口。重要性:Qt 中所有数据读写操作的基础。
  9. QAbstractItemModel

    作用:模型/视图架构中模型类的基类,用于为数据项提供标准的接口。它使得数据可以以各种形式(列表、表格、树)显示在视图(如 QListView、QTableView、QTreeView)中。重要性:模型/视图架构的核心,实现了数据与显示的分离。
  10. QAbstractButton

    作用:所有按钮控件的基类,例如 QPushButton、QCheckBox、QRadioButton 都继承自它。它提供了按钮的通用功能,如点击、选中状态等。重要性:统一了按钮类控件的行为。
  11. QMainWindow

    作用:主窗口类,提供了菜单栏、工具栏、状态栏、停靠窗口等标准主窗口组件的框架。重要性:用于创建应用程序的主窗口。
  12. QDialog

    作用:对话框窗口的基类,用于创建模态或非模态对话框。重要性:对话框是 GUI 应用程序中常用的组件。
  13. QLayout

    作用:布局管理器的基类,用于自动排列子控件。例如,QHBoxLayout、QVBoxLayout、QGridLayout 等。重要性:使得控件可以自动排列,适应窗口大小变化。
  14. QGraphicsItem

    作用:图形视图框架中所有图形项的基类,用于创建自定义的图形项,可以在 QGraphicsScene 中显示。重要性:图形视图框架的核心,用于创建复杂的交互式图形界面。
  15. QQuickItem

    作用:Qt Quick 2 中所有可视元素的基类,类似于 QWidget 在 Qt Widgets 中的地位,但用于 QML 场景。重要性:Qt Quick 应用程序的构建块。

5、举例

使用QWidget实现一个移动动画: #include <QApplication> #include <QWidget> #include <QPropertyAnimation> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr) : QWidget(parent) { setFixedSize(100, 100); } protected: void paintEvent(QPaintEvent *event) override { QPainter painter(this); painter.fillRect(rect(), Qt::blue); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); // 创建一个动画,将widget从(0,0)移动到(200,200) QPropertyAnimation animation(&widget, "pos"); animation.setDuration(2000); animation.setStartValue(QPoint(0, 0)); animation.setEndValue(QPoint(200, 200)); animation.start(); return app.exec(); } 使用Qt Quick QML实现同样的动画: import QtQuick 2.15 import QtQuick.Window 2.15 Window { width: 640 height: 480 visible: true Rectangle { id: rect width: 100 height: 100 color: "blue" // 使用动画 NumberAnimation on x { from: 0 to: 200 duration: 2000 } NumberAnimation on y { from: 0 to: 200 duration: 2000 } } }

6、QApplication与窗口关联

// MainWindow 构造函数内部(简化表示)
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 1. 创建窗口句柄
create(); // 调用 QWidget::create()

// 2. 注册到平台窗口系统
// Windows: CreateWindowEx()
// macOS: [NSWindow alloc] init]
// Linux/X11: XCreateWindow()

// 3. Qt 内部将该窗口添加到窗口列表中
QApplicationPrivate::addWidget(this);
}

int QApplication::exec()
{
// 伪代码:事件循环处理窗口关联
while (!quit) {
// 1. 获取所有顶层窗口
QWidgetList windows = QApplication::topLevelWidgets();

// 2. 处理每个窗口的事件
foreach (QWidget *window, windows) {
if (window->isVisible()) {
// 获取并分发事件到该窗口
QWindowSystemInterface::handleEvent(window, event);
}
}

// 3. 检查窗口状态
if (windows.empty()) {
quit(); // 没有窗口了,退出应用
}
}
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 0:39:32

毕业论文任务书范文推荐:7大平台+AI修改工具

毕业论文任务书范文推荐&#xff1a;7大平台AI修改工具 工具名称 核心功能 生成速度 适用场景 独特优势 aibiye 论文初稿生成 20-30分钟 全学科通用 自动插入图表公式 aicheck 初稿查重 20-30分钟 急需查重场景 独创降AIGC算法 askpaper 初稿生成 20-30分钟 …

作者头像 李华
网站建设 2026/3/13 0:18:56

JavaScript处理时间详解:时分秒的获取、计算与格式化

在JavaScript中处理时间&#xff0c;尤其是时、分、秒的获取、计算与格式化&#xff0c;是前端开发中一项基础且频繁的任务。无论是制作倒计时、显示当前时间&#xff0c;还是处理时间间隔&#xff0c;都离不开对这三个时间单位的精确操作。本文将从实际应用场景出发&#xff0…

作者头像 李华
网站建设 2026/3/12 23:13:39

AI基础从入门到实战:完整学习路线与代码实践

一、AI学习路线规划 AI学习需要遵循"数学基础→编程工具→机器学习→深度学习→项目实战"的系统路径&#xff0c;通常需要9-12个月完成从零基础到项目实战的完整学习。 阶段一&#xff1a;数学与编程基础&#xff08;1-3个月&#xff09; 数学基础是AI的基石&#…

作者头像 李华
网站建设 2026/3/13 0:52:40

驾驭昇腾CANN异步流水线从算子优化到系统级性能跃迁

目录 1 摘要 2 技术原理 2.1 架构设计理念解析 2.2 核心算法实现 2.2.1 异步执行模型深度解析 2.2.2 Stream并行机制实现原理 2.3 性能特性分析 2.3.1 同步 vs 异步性能对比 2.3.2 内存访问模式优化 3 实战部分 3.1 完整可运行代码示例 3.2 分步骤实现指南 步骤1&…

作者头像 李华
网站建设 2026/3/12 23:13:37

天远多头借贷行业风险版API接口调用代码流程、接入方法以及应用场景

一、精细化风控时代的“多头”计量工具 在互金与银行信贷业务中&#xff0c;“多头借贷”&#xff08;Multi-Lending&#xff09;往往是借款人资金链断裂的前兆。然而&#xff0c;传统的借贷次数统计已难以满足精细化风控的需求——借款人是在银行申请房贷&#xff0c;还是在夜…

作者头像 李华
网站建设 2026/3/12 23:13:53

音元系统:目录

目录 1 绪论 2 已有析音法 2.1 已有各式析音法的分类 2.1.1 各类各式二分法 2.1.1.1 两段二分法 2.1.1.1.1 声韵二分法 2.1.1.1.2 首干二分法 2.1.1.2 质调二分法 2.1.2 一调二质分析法 2.1.2.1 节调声质韵质分析法 2.1.2.2 节调声母韵母分析法 2.1.3 一调三质分析…

作者头像 李华