Qt Quick/Qt Widgets-PySide2使用qrc文件

使用步骤

创建一个 resource.qrc 文件

1
2
3
4
5
6
<RCC>
<qresource prefix="/">
<file>qtquickcontrols2.conf</file>
<file>images/images.png</file>
</qresource>
</RCC>

转换 .qrc

1
pyside2-rcc resource.qrc -o resource_qrc.py

引用 resource.py

1
2
# 在程序内引用
import resource_qrc

在程序中引用文件的地方, 更换路径

1
:/images/images.png

多国语言, 可以在 qresource 标签的 lang 属性指定

1
2
3
4
5
6
7
8
<RCC>
<qresource>
<file>image.jpg</file>
</qresource>
<qresource lang="en">
<file alias="image.jpg">image_en.jpg</file>
</qresource>
</RCC>

加载QML文件

如果使用这种方式

每次修改qml文件后都要重新生成python文件(pyside2-rcc resource.qrc -o resource.py)。

这样的好处是可以有效地防止 QML 文件在打包程序时被暴露。

文件添加到 resource.qrc 文件

1
2
3
4
5
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>

转换 .qrc

1
pyside2-rcc resource.qrc -o resources_rc.py

程序内引用 resource.py

1
2
import resources_rc
from PySide2.QtCore import QUrl

把原来的

1
engine.load(QUrl.fromLocalFile('./main.qml'))

修改为

1
engine.load(QUrl.fromLocalFile(':/main.qml'))

或者

1
engine.load(QUrl('qrc:/main.qml'))

注意

qml中引用的其他qml文件也要放在qrc中,否则找不到。

加载样式配置

qml中引用控件库

1
import QtQuick.Controls 2.15

项目根目录中添加qtquickcontrols2.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Controls]
Style=Material

[Universal]
Theme=System
Accent=Red

[Material]
Theme=Light
Accent=Teal
Primary=BlueGrey

[Material\Font]
Family=Microsoft YaHei
PixelSize=20

字体可用值

字体直接写中文名称不生效

常用字体的英文名称

宋体 SimSun

黑体 SimHei

微软雅黑 Microsoft YaHei

微软正黑体 Microsoft JhengHei

新宋体 NSimSun

新细明体 PMingLiU

细明体 MingLiU

标楷体 DFKai-SB

仿宋 FangSong

楷体 KaiTi

样式可用值

Default

img

Fusion

img

Imagine

img

Material

img

Universal

img

自动编译

你可以编写一个 Python 脚本,在运行主程序之前自动执行资源文件的编译。

compile_resources.py 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import subprocess
import sys

def compile_resources():
try:
# 运行 pyside2-uic 命令
subprocess.run(['pyside2-rcc', 'resources.qrc', '-o', 'resources_rc.py'])
print("Resource compilation successful.")
except subprocess.CalledProcessError as e:
print(f"Error compiling resources: {e}")
sys.exit(1)

if __name__ == "__main__":
compile_resources()

设置VSCode任务

项目根目录创建.vscode文件夹

添加文件tasks.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"version": "2.0.0",
"tasks": [
{
"label": "主页面",
"type": "shell",
"command": "python main.py",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

运行任务直接用快捷键Ctrl+Shift+B

运行时再点击快捷键Ctrl+Shift+B可以选择重启任务或者终止任务

先编译后执行脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"version": "2.0.0",
"tasks": [
{
"label": "编译",
"type": "shell",
"command": "pyside2-rcc resources.qrc -o resources_rc.py",
"problemMatcher": [],
},
{
"label": "主页面",
"type": "shell",
"command": "python main.py",
"dependsOn": [
"编译"
],
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}