在Qt(PyQt)中将资源读入字节数组

1 投票
1 回答
2572 浏览
提问于 2025-04-18 01:20

我想知道怎么读取一个资源文件,比如说 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,我是通过继承 QNetworkAccessManagerQNetworkReply 类来实现的。我需要这个功能是因为如果将来这个应用要上线,我希望迁移过程能更顺利一些。

现在我需要把资源里的文件(比如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())

撰写回答