Как обрабатывать данные после чтения из QIODevice.read()?
Я впервые задаю вопрос, если что-то не так, пожалуйста, скажите мне, я буду признателен.
Я использую QWebEngineUrlSchemeHandler для пользовательского URL, и я хочу использовать QFile, чтобы открыть файл javascript для тестирования.
Во-первых, если я просто использую
QFile("ken.js")
Окно может открыть javascript, но если я использую свой собственный QFile, я понятия не имею, как обрабатывать данные после того, как я прочитал из QIODevice.read().
Я хочу знать, что мне нужно сделать, чтобы окно могло открыть javascript после того, как я прочитал данные из QIODevice.read().
Пожалуйста, дайте мне несколько советов, спасибо.
Вот мой полный код.
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 ответ
На самом деле, если класс наследует от QFile, вам не нужно ничего делать, поскольку он уже реализовал методы, требуемые QWebEngineUrlRequestJob, поскольку он будет использовать методы, которые каждый класс, наследующий от QIODevice, должен реализовывать как readData(), writeData(), atEnd(), так далее.
from PyQt5 import QtCore, QtWidgets, QtWebEngineCore,QtWebEngineWidgets
class TestQFile(QtCore.QFile):
def __init__(self, fileName):
super().__init__()
self.setFileName(fileName)
class TestHandler(QtWebEngineCore.QWebEngineUrlSchemeHandler):
def requestStarted(self, request):
self.file = TestQFile("ken.js")
request.reply(b'text/javascript', self.file)
class TestWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self._view = QtWebEngineWidgets.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__':
import sys
app = QtWidgets.QApplication(sys.argv)
win = TestWindow()
sys.exit(app.exec_())