Глобальная переменная QML

Я хочу представить глобальную переменную из C ++ в QML, но я не могу сделать ее доступной для всех файлов QML.

Я пытаюсь добавить свойство контекста в QQmlEngine корневой контекст, потому что, согласно документации:

Документация QQmlEngine:

QQmlContext * QQmlEngine :: rootContext () const Возвращает механизм
корневой контекст.

Корневой контекст автоматически создается QQmlEngine. Данные, которые
должен быть доступен для всех экземпляров компонента QML, созданных
двигатель должен быть помещен в корневой контекст.

Дополнительные данные, которые должны быть доступны только для подмножества компонента
экземпляры должны быть добавлены в под-контексты, заключенные в корень
контекст.

Предполагается, что это свойство должно быть доступно для всех файлов QML. Я делаю это так:

mainwindow.cpp

MainWindow::MainWindow(QObject *parent)
: QObject(parent),
engine(new QQmlEngine(parent)),
window(NULL)
{
// Set global properties
this->setIndependentResolutionScale();

// Load the QML file
QQmlComponent component(this->engine, QUrl("qrc:/qml/MainWindow.qml"));
this->window = qobject_cast<QQuickWindow *>(component.create());
this->engine->setIncubationController(this->window->incubationController());
}

void MainWindow::setIndependentResolutionScale()
{
// In a standard resolution laptop screen->logicalDotsPerInch() is 72
QScreen *screen = qApp->screens().at(0);
qreal u = 72.0/screen->logicalDotsPerInch();

this->engine->rootContext()->setContextProperty("u", u);
}

У меня нет проблем, если я использую это свойство в MainWindow.qml но, если я пытаюсь использовать его в другом файле QML, я получаю ReferenceError: u is not defined,

Почему эта ошибка вызвана? Это потому что QQmlEngine не уникален? Есть ли другой способ создать глобальную переменную?

Я использую Qt 5.2

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]