目录
一、导出QRC文件(导出到qt design studio项目的根目录,因为接下来要转换成py文件)
一、导出QRC文件(导出到qt design studio项目的根目录,因为接下来要转换成py文件)
全部选中
二、将QRC转换成py文件
三、将转换后的py文件复制到python项目中使用
四、python调用QRC示例
import sys
from PySide6.QtCore import QObject, Slot
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtQuick import QQuickItem
from PySide6.QtWidgets import QApplication
import test_rc
# 槽函数类(一个承载槽函数的容器类)
class Slots(QObject):
def __init__(self, objects):
self.objects = objects
super().__init__()
@Slot(str, result=None)
def set_text_msg(self, msg):
# 获取qml中的Text对象
child = self.objects[0].findChild(QQuickItem, "text1")
# 获取对象属性
p = child.property("text")
# 设置对象属性
child.setProperty("text", p + msg)
@Slot(result=str)
def get_text_msg(self):
return "皎氯"
"""
这种方式是以Qml作为窗口来使用。所有的逻辑UI都由Qml来完成。python提供可以调用数据的API即可。
"""
class LoginQuickWidget:
def __init__(self):
# 初始化UI
self.engine = QQmlApplicationEngine()
# 加载qml文件
self.engine.load(u":/content/App.qml")
if not self.engine.rootObjects():
sys.exit(-1)
# qml对象集合
objects = self.engine.rootObjects()
# 实例化槽函数
self.slots = Slots(objects)
# 注入槽函数
self.engine.rootContext().setContextProperty('slots', self.slots)
if __name__ == '__main__':
import test_rc
app = QApplication([])
quick_widget = LoginQuickWidget()
app.exec()
五、可能出现的问题
①qml文件中无法import自定义模块
解决办法一:如果没有必要用模块,将相应的无法import的语句删除掉,然后再重新转换成py文件。
解决办法二:import qcr中的路径。比如上图中:无法直接import UnitiledProject,那就直接import此模块在qrc中的路径:
②qml文件中无法import系统模块
查看虚拟一下环境发现确实没有该模块。 但是我们在Qt Design Studio确实能够正常运行,所以在Qt Design Studio中必然有相应的包存在,我们直接去搞一份过来即可。具体操作如下:
(提示:上图中博主缺少的包:QtQuick.Studio.Application属于编辑器打包相关的包,所以即使复制过来,还是会报错,这种就属于没有必要导入的包,删除相应的import即可)
③找不到相应的变量