main.cpp:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
engine.rootContext()->setContextProperty("text", "hey");
return app.exec();
}
main.qml:
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
id: window
visible: true
width: 640
height: 480
Text {
text: text
}
}
Конечно, text: text
линия не делать то, что я хочу его , из-за имени затенение.
Я работал над этим, установив свойство на корневом объекте, а не на корневой контекст, и используя text: window.text
.
Есть ли какие-либо реальные исправления, хотя?
Не прямой ответ, но: условное обозначение кода, которое мы применяем, - это префикс контекстных переменных с подчеркиванием (так что в вашем случае это будет называться «_text»). Это на практике позволяет избежать конфликтов * и *, что очень ясно, что свойство исходит из C++, поэтому бессмысленно искать его в QML-коде. – peppe
Лучше ответить вместо этого на использование qmlRegisterSingletonType, а не на setContextProperty. Преимущество в этом случае заключается в том, что он может использовать квалифицированный импорт для доступа к singleton и его свойствам, разрешая ваше совпадение имен. – peppe
Кроме того, синглтоны должны быть еще быстрее для поиска. – dtech