我有一个继承QQuickItem和QQuickImageProvider的类。这个类是从qml实例化的。我需要调用QQmlEngine::addImageProvider,这样这个类才能实际提供图像。我应该能够让引擎知道我的对象存在于as described in this question中。在我的类的构造函数中,我调用
QQmlEngine *engine = nullptr;
QQmlContext *context = QQmlEngine::contextForObject(this);
if (context)
engine = context->engine();
if (engine)
engine->addImageProvider("MyImageProvider", this);但是QQmlEngine::contextForObject(this);总是返回一个空指针。为什么这不起作用?
发布于 2019-10-12 02:03:05
我想通了。在构造函数中调用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();
}那就像是一种护身符。
https://stackoverflow.com/questions/58345875
复制相似问题