【问题标题】:How to set a QML instantiated item as a QImageProvider如何将 QML 实例化项目设置为 QImageProvider
【发布时间】:2020-02-09 06:06:10
【问题描述】:

我有一个继承QQuickItemQQuickImageProvider 的类。这个类是从 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); 总是返回一个空指针。为什么这不起作用?

【问题讨论】:

    标签: c++ qt qqmlengine


    【解决方案1】:

    我想通了。在构造函数中调用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();
    }
    

    那么这就像一个魅力。

    【讨论】:

    • 或classBegin方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多