0

我有一个继承QQuickItem和的类QQuickImageProvider。这个类是从 qml 实例化的。我需要打电话QQmlEngine::addImageProvider,这样这个类才能真正提供图像。如this question中所述,我应该能够获得我的对象所在的引擎。在我正在调用的类的构造函数中

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

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

4

1 回答 1

0

我想到了。调用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();
}

然后这就像一个魅力。

于 2019-10-11T18:03:04.927 回答