在Qt(PyQt)中将资源读入字节数组
我想知道怎么读取一个资源文件,比如说 assets/font-awesome/fonts/fontawesome-webfont.ttf
或者 assets/jquery/js/jquery-1.11.0.min.js
,这些文件是在一个叫 myresources.qrc
的文件里声明的,然后用 pyrcc5.exe
编译成了一个 myresources.py
的模块。我想把它们读成字节数组、字节字符串(b'')和普通字符串('')。
我已经成功实现了一个自定义的方案处理器,可以处理像这样的请求:myscheme://controller/action/?param1=100,我是通过继承 QNetworkAccessManager
和 QNetworkReply
类来实现的。我需要这个功能是因为如果将来这个应用要上线,我希望迁移过程能更顺利一些。
现在我需要把资源里的文件(比如html、css、js、图片、字体等)提供给 QWebView
,使用我自定义的方案。我试过用 QFile
和它的 readAll
方法。
这是我的代码:
f = QFile('qrc:///assets/jquery/js/jquery-1.11.0.min.js')
f.open(QIODevice.ReadOnly | QIODevice.Unbuffered)
try:
self.content = f.readAll()
finally:
f.close()
看起来 f.readAll()
似乎没有任何作用。
1 个回答
1
你的资源路径不正确,而且异常处理是多余的,因为如果打开或读取失败,实际上不会抛出错误(这不是bug或者设计缺陷——Qt的工作方式和Python不一样)。
可以试试下面这样的写法:
stream = QFile(':/assets/jquery/js/jquery-1.11.0.min.js')
if stream.open(QFile.ReadOnly):
js = str(stream.readAll(), 'utf-8')
stream.close()
else:
print(stream.errorString())