[PyQt] PyQt5 fails to handle QQuickImageProvider subclassing
Julio César Gázquez
julio_lists at mebamutual.com.ar
Thu Jan 5 13:47:50 GMT 2017
El 04/01/17 a las 16:17, Phil Thompson escribió:
>> ImageProvider supports Image type but has not implemented requestImage()
>>
>> Seems this message comes from Qt's QQuickImageProvider::requestImage() implementation, so it's like the C++ method isn't being overridden by the PyQt's wrapper method.
>>
>> These methods are somewhat peculiar, as they are virtual methods (and specifically meant to be subclassed) and have an /Out/ parameter. Doing a grep on the PyQt sources I see this only happens in two places outside this class. Maybe the wrapper for the virtual method lacks the /Out/ parameter?
>>
>>
> Try it, just pip install the latest version into a venv.
No, I'm afraid it doesn't work even with 5.7.1 (via pip install on
Ubuntu Xenial):
julio at marte:~/devel/test$ python3 test.py
ImageProvider supports Image type but has not implemented requestImage()
file:///home/julio/devel/test/test.qml:3:1: QML Image: Failed to get
image from provider: image://images/any.jpg
> Otherwise I would need a short complete example that demonstrates the problem.
>
Minimal test example below.
test.py:
from PyQt5.QtCore import QUrl, Qt
from PyQt5.QtGui import QGuiApplication, QImage
from PyQt5.QtQuick import QQuickView, QQuickImageProvider
class ImageProvider(QQuickImageProvider):
def __init__(self):
super().__init__(QQuickImageProvider.Image)
def requestImage(self, id_, requestedSize):
""" Just a red image """
image = QImage(requestedSize.width(), requestedSize.height())
image.fill(Qt.red)
return image, requestedSize
class Application(QGuiApplication):
def __init__(self, argv):
super().__init__(argv)
self._view = QQuickView()
self._view.engine().addImageProvider("images", ImageProvider())
self._view.setSource(QUrl.fromLocalFile("test.qml"))
self._view.show()
if __name__ == '__main__':
app = Application([])
app.exec_()
test.qml:
import QtQuick 2.1
Image {
width: 400
height: 300
source: "image://images/any.jpg"
}
TIA.
Greetings, Julio.
More information about the PyQt
mailing list