你不使用MyQuickImageProvider
作为 QML 对象,您也没有定义Q_INVOKABLE
方法,因为您无法从 QML 访问图像提供程序对象。
engine.addImageProvider("my_quick_image_provider", [...]
设置您访问图像的方式的名称,例如
// qml file
Image {
source: "image://my_quick_image_provider/name_of_my_image"
}
后面的部分“name_of_my_image”被称为id
,您可以在其中找到
virtual QPixmap requestPixmap ( const QString &id, QSize *size, const QSize &requestedSize );
现在实施requestPixmap
在你的MyQuickImageProvider
并让它使用id
字符串来生成 QPixmap。
我想你可以扔掉void setPath ( QUrl path );
方法,因为您只需要一个图像提供程序实例来处理该类型的所有图像。
由于构造函数不是从基类继承的,我不认为new MyQuickImageProvider(QQmlImageProviderBase::Image));
说得通。最好添加一个不带参数的构造函数
class MyQuickImageProvider : public QQuickImageProvider {
public:
MyQuickImageProvider();
// ...
并将图像类型放入初始值设定项列表中:
MyQuickImageProvider::MyQuickImageProvider()
: QQuickImageProvider(QQuickImageProvider::Pixmap)
{
}