在 PySide6 ​和 QML ​中,有两种主要的方式来创建和管理 QML UI:使用 QQuickView 和 QQmlApplicationEngine。

1. QQuickView

QQuickView 是一个可视化窗口,用于显示和管理 QML UI。您可以将 QQuickView 视为一个独立的窗口,它可以加载和显示 QML 文件。

  • 使用 QQuickView 或 QQmlApplicationEngine 类可以创建一个 QML 视图对象,它是一个高级界面容器,可以显示 QML 内容。
  • QML 视图可以加载和显示 QML 文件,而不需要额外的代码。
  • 可以使用 rootObject() 方法获取根 QML 对象,然后通过该对象访问 QML 中的属性和方法。
  • QML 视图对象通常用于简单的界面应用程序,而不需要太多的自定义逻辑。

QML 视图对象通常用于简单的界面应用程序,而不需要太多的自定义逻辑。

1from PySide6.QtCore import QUrl
2from PySide6.QtGui import QGuiApplication
3from PySide6.QtQuick import QQuickView
4
5app = QGuiApplication([])
6view = QQuickView()
7view.setSource(QUrl.fromLocalFile("main.qml"))
8view.show()
9app.exec()

在上述示例中,我们创建了一个 QQuickView ​对象,并使用 setSource 方法加载了一个 QML ​文件。然后,使用 show 方法显示了窗口,最后通过 app.exec 进入 Qt ​事件循环。

2. QQmlApplicationEngine

QQmlApplicationEngine 是一个 QML ​引擎,它可以加载和执行 QML ​文件,并将其嵌入到现有的 Qt 应用程序中。

  • 使用 QmlEngine 类可以创建一个 QML 引擎对象,它负责加载和管理 QML 内容。
  • 可以将 QML 文件加载到引擎中,并通过引擎对象与 Python 代码进行交互。
  • 引擎对象可以设置全局属性、注册自定义类型和提供信号与槽机制。
  • 可以通过 rootObjects() 方法获取根 QML 对象,然后通过该对象访问 QML 中的属性和方法。
1from PySide6.QtCore import QUrl
2from PySide6.QtGui import QGuiApplication
3from PySide6.QtQml import QQmlApplicationEngine
4
5app = QGuiApplication([])
6engine = QQmlApplicationEngine()
7engine.load(QUrl.fromLocalFile("main.qml"))
8app.exec()

在上述示例中,我们创建了一个 QQmlApplicationEngine ​对象,并使用 load 方法加载了一个 QML ​文件。然后,通过 app.exec 进入 Qt 事件循环。

3. 主要区别

  • QQuickView ​是一个可视化窗口,可以作为独立的应用程序窗口来使用,可以使用窗口管理功能,例如调整大小、最小化等。
  • QQmlApplicationEngine ​是一个 QML 引擎,主要用于将 QML 嵌入到现有的 Qt 应用程序中,没有独立的窗口管理功能。

4. 总结

  • 使用 QML 引擎(QML Engine)可以手动加载 QML 文件并进行更多的自定义操作,适用于需要更复杂交互和逻辑的场景。
  • 使用 QML 视图(QML View)是一种简化的方式,适用于简单的界面应用程序,无需太多自定义操作。
  • 如果您只需要一个独立的 QML 窗口,可以使用 QQuickView。如果您希望将 QML 嵌入到现有的 Qt 应用程序中,可以选择 QQmlApplicationEngine。