我有一个继承QQuickItem
和QQuickImageProvider
的类。此类是从 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();
}
然后这就像一个魅力。