如何将 QML 实例化项设置为 QImageProvider



我有一个继承QQuickItemQQuickImageProvider的类。此类是从 qml 实例化的。我需要调用QQmlEngine::addImageProvider以便此类实际上可以提供图像。我应该能够获得我的对象所在的引擎,如此问题中所述。在我调用的类的构造函数中

QQmlEngine *engine = nullptr;
QQmlContext *context = QQmlEngine::contextForObject(this);
if (context)
engine = context->engine();
if (engine)
engine->addImageProvider("MyImageProvider", this);

QQmlEngine::contextForObject(this);总是返回一个空指针。为什么这不起作用?

我想通了。在构造函数中调用QQmlEngine::contextForObject(this);不起作用,我猜是因为对象尚未完成构造。如果我创建一个Q_INVOKABLE函数稍后注册它

void MyImageProvider::registerImageProvider()
{
QQmlEngine *engine = nullptr;
QQmlContext *context = QQmlEngine::contextForObject(this);
if (context)
engine = context->engine();
if (engine) {
engine->removeImageProvider("MyImageProvider");
engine->addImageProvider("MyImageProvider", this);
}
}

然后在我的 QML 中:

ImageProvider {
id: myClass
Component.onCompleted: myClass.registerImageProvider();
}

然后这就像一个魅力。

最新更新