Qt Qml 模块提供的关键C++类
该 Qt Qml 模块提供了实现 QML 框架的 C++ 类。客户端可以使用这些类与 QML 运行时进行交互(例如,注入数据或调用对象的方法),并从 QML 文档中实例化对象层次结构。Qt Qml 模块提供的 C++ API 不仅限于此处列出的类,但此处列出的类构成了 QML Runtime 的基础,并体现了 QML 的核心概念。
QML Runtime
一个具有 C++ 入口点的典型 QML 应用程序会实例化一个 `QQmlEngine `,然后使用 `QQmlComponent ` 加载 QML 文档。 引擎提供了一个默认的QQmlContext ,它将作为用于评估 QML 文档中定义的函数和表达式的顶级评估上下文。假设文档加载过程中未遇到任何错误,QML 文档中定义的对象层次结构将通过调用QQmlComponent 实例的create() 函数来实例化。
客户端可能希望通过向上下文中注入属性或对象,来修改引擎提供的QQmlContext 。他们可以调用QQmlEngine::rootContext()函数来访问顶级上下文。
在实例化对象后,客户端通常会将控制权移交给应用程序事件循环,以便用户输入事件(如鼠标点击)能够被传递并由应用程序处理。
注意: Qt Quick 模块提供了一个 便捷类QQuickView ,该类提供了一个QML Runtime和用于显示QML应用程序的视觉窗口。
QQmlEngine 类
QQmlEngine 类提供了一个引擎,可以管理 QML 文档中定义的对象层次结构。它提供了一个根 QML 上下文,用于在其中评估表达式,并确保在需要时正确更新对象的属性。
QQmlEngine 允许配置适用于其所管理所有对象的全局设置;例如,用于网络通信的QNetworkAccessManager ,以及用于持久化存储的文件路径。
有关 `QQmlEngine ` 类提供的功能及其在应用程序中的使用方法,请参阅 `QQmlEngine ` 类的文档。
QQmlContext 类
QQmlContext 类为对象实例化和表达式求值提供了一个上下文。所有对象都在特定的上下文中实例化,应用程序运行期间求值的所有表达式也都在特定的上下文中进行求值。该上下文定义了符号的解析方式,从而决定了表达式所操作的值。
有关如何通过添加或移除QQmlContext 的属性来修改对象的求值上下文,以及如何访问对象的上下文,请参阅QQmlContext 类的文档以获取详细信息。
动态对象实例化和表达式求值
动态对象实例化和动态表达式求值都是 QML 中的核心概念。QML 文档定义了对象类型,这些类型可以在运行时使用 `QQmlComponent` 进行实例化。QQmlComponent 类的实例可以在 C++ 中直接创建,也可以通过命令式 QML 代码中的 `Qt.createComponent()` 函数创建。 在 C++ 中,可以通过QQmlExpression 类计算任意表达式,且此类表达式可与 QML 上下文直接交互。
QQmlComponent 类
QQmlComponent 类可用于加载QML文档。它需要一个QQmlEngine 来实例化QML文档中定义的对象层次结构。
有关如何使用 `QQmlComponent` 的详细信息,请参阅 `QQmlComponent ` 类的文档。
QQmlExpression 类
QQmlExpression 类提供了一种机制,允许客户端在 C++ 中使用特定的 QML 评估上下文来求值 JavaScript 表达式。这使得客户端能够通过 ID 等方式访问 QML 对象。求值结果将作为QVariant 返回,其转换规则由 QML 引擎定义。
有关如何在应用程序中使用QQmlExpression 的详细信息,请参阅QQmlExpression 类的文档。
在 QML 应用程序中使用这些类
以下页面介绍了如何创建与 C++ 类交互的 QML 应用程序:
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.