从QIODevice.read()读取后如何处理数据?

时间:2018-12-10 19:42:23

标签: python pyqt pyqt5 qiodevice

这是我第一次问问题,如果我做错了什么,请告诉我,我将不胜感激。

我正在使用QWebEngineUrlSchemeHandler作为自定义网址,并且我想使用QFile打开一个JavaScript文件进行测试。

首先,如果我只是使用

QFile("ken.js")

该窗口可以打开javascript,但是如果我使用自定义的QFile, 从QIODevice.read()读取后,我不知道如何处理数据。

我想知道在从QIODevice.read()读取数据后,要使窗口可以打开javascript,需要做些什么。

请给我一些建议,谢谢。

这是我的完整代码。

class TestQFile(QtCore.QFile):
    def __init__(self, fileName):
        super().__init__()
        self.setFileName(fileName)
        self.open(self.ReadOnly)

        self.data = b''

        while True:
            receivedData = self.read(10)
            self.data += receivedData
            if receivedData == b'':
                break

class TestHandler(QWebEngineUrlSchemeHandler):
    def requestStarted(self, request):
        self._dev = TestQFile("ken.js")
        request.reply(b'text/javascript', self._dev)


class TestWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self._view = QWebEngineView(self)
        self._handler = TestHandler() # Must keep ref
        self._view.page().profile().installUrlSchemeHandler(b'myuri', self._handler)
        self._view.setHtml('<html><head><title>Test</title></head><body><div id="d1"></div><script src="myuri://test/ken.js"></script></body></html>')
        self.setCentralWidget(self._view)
        self.show()
        self.raise_()

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    win = TestWindow()
    app.exec_()

1 个答案:

答案 0 :(得分:0)

实际上,如果类从QFile继承,则您无需执行任何操作,因为它已经实现了QWebEngineUrlRequestJob所需的方法,因为它将使用从QIODevice继承的每个类都必须实现为readData(),writeData()的方法。 ,atEnd()等。

man dig