QML专题(未通过测试,仍在补全中)

官网教程(优先考虑):链接

重新安装QT for Python

Windows环境安装官方参考:链接

因为 PySide6 默认不支持 SSL,但是 QML 需要用到 SSL,并且需要配置版本一致的 SSL 库,所以,不得不装个QT了。

解压 libclang-release_100-based-windows-vs2019_64.7z,找到 libclang 文件夹,并将其拷贝到 C: 目录盘(或者其它您想放的地方)下。

解压 openssl-1.0.2j-fips-x86_64.zip,(后面会用到)。

配置环境变量

打开命令行,依次输入:

  1. set LLVM_INSTALL_DIR=C:\libclang
  2. set PATH=C:\libclang\bin;%PATH%

MacOS 和 Linux 请移至官方教程查看。

安装PySide6

Git:下载并安装(默认安装在:C:\Program Files\Git)
Qt:下载并安装(选择您需要的版本,此处我选择 5.14
CMake:下载并安装
Python3.8.10:下载并安装

安装Qt时注意勾选【MSVC 2017 64-bit】组件!!!有条件有时间的话最好全部勾选了,省心省力,就是浪费点时间。

注意:因为Qt官方在5.15版本之后不再免费提供安装包,所以5.14应该是最新的能够免费获取到的安装包了。

安装PySide6步骤(请确保您的Python版本在[(2, 7), (3, 5), (3, 6), (3, 7), (3, 8)]内):

  1. git clone --recursive https://code.qt.io/pyside/pyside-setup
  2. cd pyside-setup && git checkout 5.14
  3. pip install wheel==0.34.2
  4. python setup.py build --qmake=C:\Qt2\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe --openssl=C:\OpenSSL\bin --build-tests --ignore-git --parallel=8

第二步的 5.14 一定要和安装的 Qt 版本号一致!!!此处我统一版本为 5.14

第四步的 C:\Qt2\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe 是我安装 Qt 的路径;C:\OpenSSL\bin 是我 openssl-1.0.2j-fips-x86_64.zip 解压的路径。

附:Qt Downloads (QT的下载资源库)

Python启动代码

from PySide6.QtWidgets import QApplication
from PySide6.QtQuick import QQuickView
from PySide6.QtCore import QUrl

app = QApplication([])
view = QQuickView()

''' view.qml 是与本 py 文件在同一目录下的 qml 文件
'''
url = QUrl("view.qml")

view.setSource(url)
view.setResizeMode(QQuickView.SizeRootObjectToView)
view.show()
app.exec()

QML-Import模块

目前官方提供三种类型的导入方式:

  1. 命名空间/C++模块:import <ModuleIdentifier> [<Version.Number>] [as <Qualifier>]
  2. 目录:import "<DirectoryPath>" [as <Qualifier>]
  3. JavaScript:import "<JavaScriptFile>" as <Identifier>

命名空间/C++模块

// 基本导入(此方式导入的模块,将在全局中奏效)
// 全局奏效的意思是:可以在本QML文件的任意地方调用模块内的对象或方法。
import QtQuick
import QtQuick.LocalStorage

// 指定版本导入(此方式导入的模块,将在全局中奏效)
import QtQuick 2.0
import QtQuick.LocalStorage 2.0

// 指定命名空间导入(此方法导入的模块,将封包在 `as` 后的命名空间中)
// 如:全局可直接引用的 `ApplicationWindow` 将变成 `MyQuick.ApplicationWindow` 的使用方式
import QtQuick as MyQuick
import QtQuick 2.0 as MyQuick

特别的: 命名空间方式引入的库,as 后的新的命名空间名称允许相同,如果同一个 QML 文件中有两个一样的 as 命名空间名称,那么这个命名空间 会集成所有的对象。(如果对象名出现冲突,还是不建议使用一样的命名空间名称)

目录

目录内必须包含 QML 文件对象。
可以本地导入,也可以远程导入(远程导入暂不了解)。

import "./MyComponents"

// 或者
import "./MyComponents" as MC

JavaScript

import "demo.js"

// 或者
import "demo.js" as MyJS

特别的: JavaScript引入方式,as 后的新的命名空间名称,在同一 QML 文件中禁止重复。

注意:必须先导入模块,然后才能使用内置的一些对象,否则QML解析引擎会拒绝解析。

QML-QtQuick对象