내 코드 :QML : 구성 요소 로컬 속성에 의해 이름이 숨겨진 경우 컨텍스트 속성에 액세스하는 방법?
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
라인은 I가 원하는 것을하지 않는다 , 때문에 이름 섀도 잉.
루트 컨텍스트가 아닌 루트 개체의 속성을 설정하고 text: window.text
을 사용하여이 문제를 해결했습니다.
실제 수정본이 있습니까?
직접적인 대답은 아니지만, 우리가 적용하는 코드 규칙은 컨텍스트 변수 앞에 밑줄을 붙이는 것입니다 (따라서 "_text"라고도 함). 이것은 실제적으로 충돌을 피합니다. * 그리고 속성이 C++에서 왔음을 명확하게 나타내므로 QML 코드에서 속성을 찾는 것이 무의미합니다. – peppe
더 나은 대답은 setContextProperty 대신 qmlRegisterSingletonType을 사용하는 것입니다. 이 경우 장점은 정규화 된 가져 오기를 사용하여 싱글 톤 및 해당 속성에 액세스하여 이름 충돌을 해결할 수 있다는 것입니다. – peppe
또한 싱글 톤은 조회를 위해 훨씬 더 빠르다고 가정합니다. – dtech