淡若轻风

博客园 首页 新随笔 联系 订阅 管理

以下是 Qt 开发中最重要、最核心的概念和术语,我会按类别整理,并附上简要解释和重要性。

1. 核心基础概念

  • QObject Qt 整个对象模型的基类。几乎所有 Qt 类都继承自 QObject。它提供了信号槽属性系统对象树内存管理等核心能力。
  • 信号与槽 (Signals & Slots) Qt 最标志性的机制。
    • Signal:对象发出的“事件通知”(如按钮点击 clicked())。
    • Slot:用于接收信号并执行的函数。 优点:松耦合、类型安全、支持跨线程通信。 使用:QObject::connect(sender, &Sender::signal, receiver, &Receiver::slot);
  • 元对象系统 (Meta-Object System) Qt 通过 MOC (Meta-Object Compiler) 预处理器实现。 它让 C++ 在运行时支持信号槽属性类型信息动态调用等动态特性(C++ 本身是静态语言)。
  • MOC (Meta-Object Compiler) 专门处理 Q_OBJECT 宏的工具,会为每个 QObject 子类生成 moc_xxx.cpp 文件。

2. 对象模型与内存管理

  • 对象树 (Object Tree) / 父子关系 (Parent-Child) Qt 使用父子对象关系自动管理内存:
    • 当父对象析构时,会自动析构所有子对象。
    • setParent()、parent() 等方法。 这极大简化了内存管理,避免内存泄漏。
  • 属性系统 (Properties) 使用 Q_PROPERTY 宏定义的成员变量,支持在 QML 中绑定、在运行时动态读写、设计器中编辑等。
  • 事件 (Event) 与 事件循环 (Event Loop)
    • Qt 是事件驱动的框架。
    • 所有界面交互、定时器、网络数据到达等都转化为 QEvent。
    • QApplication::exec() 启动主事件循环,持续处理事件。

3. UI 开发两大体系

概念说明适用场景
Qt Widgets 传统控件系统(QWidget、QPushButton 等) 传统桌面企业软件
Qt Quick / QML 声明式 UI 语言 + Scene Graph 硬件加速 现代应用、嵌入式、汽车
  重要术语
  • QWidget:所有传统控件的基类。
  • QML:Qt Meta Language,声明式 UI 语言(类似 JSON + JavaScript)。
  • QQmlEngine:QML 引擎。
  • Context Property:C++ 对象暴露给 QML 的方式。
  • QQuickItem:QML 中所有可视项的基类。

4. 布局与 UI 管理

  • Layout(布局管理器):QHBoxLayout、QVBoxLayout、QGridLayout、QFormLayout 等,用于自动排列控件。
  • Size Policy(大小策略):QSizePolicy 控制控件如何在布局中伸缩。
  • Style Sheet (QSS):Qt 的样式表,类似 CSS,用于美化界面。

5. 模型/视图架构 (Model/View)

  • Model/View/Delegate 模式(强烈推荐使用):
    • Model:数据模型(QAbstractListModel、QAbstractTableModel 等)
    • View:视图组件(QListView、QTableView、QTreeView)
    • Delegate:自定义每一项的绘制和编辑方式
  • 在 QML 中对应 ListModel + ListView 等。

6. 多线程相关

  • QThread:Qt 的线程类。
  • Worker Object 模式(推荐):把耗时工作对象 moveToThread() 到新线程中。
  • Qt Concurrent:高级并发工具(QtConcurrent::run())。
  • QueuedConnection:跨线程信号槽必须使用这个连接方式。

7. 其他重要概念

  • 国际化 (i18n):使用 tr() 函数 + Qt Linguist 工具。
  • 资源系统 (Resource System):.qrc 文件,把图片、qml、配置文件打包进可执行文件。
  • 插件系统 (Plugins):QPluginLoader,支持动态扩展。
  • 智能指针:Qt 6 推荐使用 std::unique_ptr、QScopedPointer 等。
  • CMake:Qt 6 官方推荐的构建系统(取代旧的 qmake)。

8. 常用宏与关键字

  • Q_OBJECT:必须写在所有继承 QObject 的类中。
  • signals:、public slots:、private slots:
  • emit:触发信号的关键字。
  • Q_INVOKABLE:让 C++ 函数能在 QML 中被调用。
  • Q_ENUM、Q_FLAG:枚举类型暴露到 QML。

学习优先级建议

入门必须掌握(前 5 个):

  1. QObject + 对象树
  2. Signals & Slots + connect
  3. QWidget / QML 基础
  4. 事件循环
  5. 布局系统

进阶必须掌握

  • Model/View 架构
  • C++ 与 QML 混合编程
  • 多线程正确用法
  • 属性系统与 Q_PROPERTY
posted on 2026-06-02 09:56  淡若轻风  阅读(23)  评论(0)    收藏  举报