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
,(后面会用到)。
配置环境变量
打开命令行,依次输入:
set LLVM_INSTALL_DIR=C:\libclang
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)]内):
git clone --recursive https://code.qt.io/pyside/pyside-setup
cd pyside-setup && git checkout 5.14
pip install wheel==0.34.2
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模块
目前官方提供三种类型的导入方式:
- 命名空间/C++模块:
import <ModuleIdentifier> [<Version.Number>] [as <Qualifier>]
; - 目录:
import "<DirectoryPath>" [as <Qualifier>]
- 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解析引擎会拒绝解析。