QML не получает свойство из синглтона в другом файле - PullRequest
0 голосов
/ 31 марта 2020

Я создал проект, который помещает некоторый QML в плагин, и приложение, использующее Qt QPluginLoader.

Затем QML приложения может использовать QML плагина, с одной заметной проблемой. Из одного из файлов плагина QML я не могу прочитать свойство синглтона в другом файле QML. Если вы посмотрите в файл hello.qml, есть текстовый элемент, который пытается получить его текст из MySingleton, но этот текст не отображается. Когда я подставляю строковый литерал (закомментированную строку), текст отображается очень хорошо.

Я получил проект здесь: https://github.com/rhvonlehe/qmlplugin

Сам проект очень базовый c, но в нем представлено много того же, что происходит в более крупном проекте, и я не могу поделиться им, но у него есть та же проблема.

Вывод как есть:

enter image description here

В синем прямоугольнике должны быть слова «Текст синглтона»

1 Ответ

0 голосов
/ 01 апреля 2020

QtCompany предоставила ответ, которым я могу поделиться здесь.

Короче говоря, чтобы получить полную функциональность, ожидаемую от QML в плагине, который мне нужен для использования QQmlExtensionPlugin. Вот обновленные файлы для работы (Plugin.h и hello.qml)

hello.qml

import QtQuick 2.0
import org.example.PluginInterface 1.0
import "."

Rectangle {
    id: page
    width: 320; height: 240
    color: "lightgray"

    Text {
        id: helloText
        text: "Hello world!"
        y: 30
        anchors.horizontalCenter: page.horizontalCenter
        font.pointSize: 24; font.bold: true
    }

    Rectangle {
        id: innerPage
        width: 300; height: 30
        anchors.horizontalCenter: page.horizontalCenter
        color: "blue"

        Text {
            id: nextOne
            color: "white"
//            text: "literal Text"
            text: MySingleton.getTheText()
            anchors.verticalCenter: innerPage.verticalCenter
            anchors.horizontalCenter: innerPage.horizontalCenter
            font.pointSize: 18; font.bold: false
        }
    }

    OtherThing {
        id: myOtherThing
        x: 20; y: 150
    }

}

Plugin.h

#ifndef PLUGIN_H
#define PLUGIN_H

#include <PluginIf.h>
#include <QQmlExtensionPlugin>
#include <QQmlEngine>

class Q_DECL_EXPORT Plugin : public QQmlExtensionPlugin, PluginInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
    Q_INTERFACES(PluginInterface)
public:
    void init() override;
    void registerTypes(const char *uri) override
    {
        qmlRegisterSingletonType(QUrl("qrc:/MySingleton.qml"), uri, 1, 0, "MySingleton");
    }
};

#endif // PLUGIN_H
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...