如何使用Qt资源系统显示本地html文件?显而易见的QtCore.QUrl.fromLocalFile(":/local_file.html")
似乎不是正确的语法。
文件mainwindow.qrc(编译前)
<qresource prefix="/">
<file alias="html_home">webbrowser_html/program_index.html</file>
文件ui_mainwindow:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
#...
self.WebBrowser = QtWebKit.QWebView(self.Frame3)
档案webbrower.py
from ui_mainwindow import Ui_MainWindow
import mainwindow_rc
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
#...
stream = QtCore.QFile(':/webbrowser_html/program_index.html')
if stream.open(QtCore.QFile.ReadOnly):
home_html = QtCore.QString.fromUtf8(stream.readAll())
self.WebBrowser.setHtml()
stream.close()
答案 0 :(得分:7)
QUrl
需要一个方案,资源为qrc://
。 docs的相关部分:
默认情况下,资源可以在相同的应用程序中访问 文件名,因为它们在源树中具有
:/
前缀或a 带有qrc
计划的网址。例如,文件路径
:/images/cut.png
或URLqrc:///images/cut.png
将提供对cut.png文件的访问权限 应用程序源树中的位置是images/cut.png
。
所以,请改用:
QtCore.QUrl("qrc:///local_file.html")
修改强>
您正在为文件提供alias
(alias="html_home"
):
<qresource prefix="/">
<file alias="html_home">webbrowser_html/program_index.html</file>
路径现在是:/html_home
,而不是:/webbrowser_html/program_index.html
您应该使用:
QtCore.QUrl("qrc:///html_home")
你的情况如下:
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
#...
self.WebBrowser.load(QtCore.QUrl('qrc:///html_home'))
(如果您打算使用它,也应该调整ekhumoro's solution。另请注意,您没有在粘贴中设置页面的HTML。)
答案 1 :(得分:0)
可以使用QFile
打开本地资源文件:
stream = QFile(':/local_file.html')
if stream.open(QFile.ReadOnly):
self.browser.setHtml(QString.fromUtf8(stream.readAll()))
stream.close()