QQmlContext Class
QQmlContext 클래스는 QML 엔진 내에서 컨텍스트를 정의합니다. 더 보기...
Header: | #include <QQmlContext> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
상속합니다: | QObject |
공용 유형
struct | PropertyPair |
공용 함수
QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr) | |
QQmlContext(QQmlEngine *engine, QObject *parent = nullptr) | |
virtual | ~QQmlContext() override |
QUrl | baseUrl() const |
QObject * | contextObject() const |
QVariant | contextProperty(const QString &name) const |
QQmlEngine * | engine() const |
bool | isValid() const |
QString | nameForObject(const QObject *object) const |
(since 6.2) QObject * | objectForName(const QString &name) const |
QQmlContext * | parentContext() const |
QUrl | resolvedUrl(const QUrl &src) const |
void | setBaseUrl(const QUrl &baseUrl) |
void | setContextObject(QObject *object) |
void | setContextProperties(const QList<QQmlContext::PropertyPair> &properties) |
void | setContextProperty(const QString &name, QObject *value) |
void | setContextProperty(const QString &name, const QVariant &value) |
상세 설명
컨텍스트는 QML 문서에서 ID로 식별되는 객체를 보관합니다. nameForObject () 및 objectForName()를 사용하여 검색할 수 있습니다.
참고: 생성한 QQmlContext를 삭제하는 것은 생성자의 책임입니다. QQmlContext가 더 이상 필요하지 않은 경우 명시적으로 삭제해야 합니다. 이를 보장하는 가장 간단한 방법은 QQmlContext에 parent 을 지정하는 것입니다.
컨텍스트 계층 구조
컨텍스트는 계층 구조를 형성합니다. 이 계층 구조의 루트는 QML 엔진의 root context 입니다. 각 QML 컴포넌트는 인스턴스화될 때 자체 컨텍스트를 생성하고 일부 QML 요소는 자체적으로 추가 컨텍스트를 생성합니다.
컨텍스트에서 인스턴스화된 QML 객체는 해당 컨텍스트에 의해 엄격하게 소유되지는 않지만 바인딩은 소유됩니다. 컨텍스트가 파괴되면 미완성된 QML 객체의 속성 바인딩은 평가를 중지합니다.
컨텍스트 속성
또한 컨텍스트를 사용하면 QML 엔진에 의해 인스턴스화된 QML 컴포넌트에 데이터를 노출할 수 있습니다. 이러한 데이터는 다음을 포함한 모든 툴링에 보이지 않습니다. Qt Quick Compiler 을 포함한 모든 툴링과 해당 QML 문서의 향후 독자에게는 보이지 않습니다. QML 컴포넌트가 구상 중인 특정 C++ 컨텍스트에서 인스턴스화된 경우에만 노출됩니다. 다른 곳에서는 다른 컨텍스트 데이터가 대신 노출될 수 있습니다.
QML 컨텍스트를 사용하여 QML 컴포넌트에 데이터를 노출하는 대신 데이터를 보유할 추가 객체 속성을 만들거나 singletons 을 사용해야 합니다. 자세한 설명은 QML에 C++ 상태 노출하기를 참조하세요.
각 QQmlContext에는 QObject 속성과는 별개로 데이터를 이름으로 컨텍스트에 명시적으로 바인딩할 수 있는 속성 집합이 포함되어 있습니다. 컨텍스트 속성은 QQmlContext::setContextProperty()를 호출하여 정의하고 업데이트할 수 있습니다.
더 큰 데이터 세트의 바인딩과 유지 관리를 단순화하기 위해 컨텍스트 객체를 QQmlContext에 설정할 수 있습니다. 컨텍스트 객체의 모든 속성은 QQmlContext::setContextProperty() 호출을 통해 개별적으로 추가된 것처럼 컨텍스트에서 이름별로 사용할 수 있습니다. 프로퍼티 값의 변경은 프로퍼티의 알림 신호를 통해 감지됩니다. 컨텍스트 객체를 설정하는 것이 컨텍스트 속성 값을 수동으로 추가하고 유지하는 것보다 빠르고 쉽습니다.
QQmlContext::setContextProperty()로 명시적으로 추가된 모든 속성은 컨텍스트 개체의 속성보다 우선합니다.
자식 컨텍스트는 부모의 컨텍스트 속성을 상속하며, 자식 컨텍스트가 부모에 이미 존재하는 컨텍스트 속성을 설정하는 경우 새 컨텍스트 속성이 부모의 속성을 재정의합니다.
경고: 컨텍스트 객체를 설정하거나 해당 컨텍스트에서 객체가 생성된 후 새 컨텍스트 속성을 추가하는 것은 비용이 많이 드는 작업입니다(기본적으로 모든 바인딩을 다시 평가해야 함). 따라서 컨텍스트 속성을 사용해야 하는 경우 최소한 컨텍스트의 '설정'을 완료한 후에 개체를 만들어야 합니다.
C++ 타입의 어트리뷰트를 QML에 노출하기를참조하세요 .
멤버 함수 문서
QQmlContext::QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr)
주어진 parentContext 과 QObject parent 을 사용하여 새 QQmlContext를 생성합니다.
QQmlContext::QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)
engine 의 루트 컨텍스트와 QObject parent 의 하위 컨텍스트로서 새 QQmlContext를 생성합니다.
[override virtual noexcept]
QQmlContext::~QQmlContext()
QQmlContext 를 파괴합니다.
이 컨텍스트에 종속된 모든 표현식 또는 하위 컨텍스트는 무효화되지만 파괴되지는 않습니다( QQmlContext 객체에 대한 부모가 아닌 경우).
QUrl QQmlContext::baseUrl() const
컴포넌트의 기본 URL을 반환하거나 설정된 것이 없는 경우 포함된 컴포넌트를 반환합니다.
setBaseUrl()도 참조하세요 .
QObject *QQmlContext::contextObject() const
컨텍스트 객체를 반환하거나 컨텍스트 객체가 없는 경우 nullptr
을 반환합니다.
setContextObject()도 참조하세요 .
QVariant QQmlContext::contextProperty(const QString &name) const
이 컨텍스트에 대한 name 속성 값을 QVariant 으로 반환합니다. 찾고자 하는 속성이 현재 컨텍스트에서 QML ID를 사용하여 할당된 QObject 인 경우 objectForName()를 사용하는 것이 더 편리하고 빠릅니다. objectForName () 및 nameForObject()와 달리 이 메서드는 컨텍스트 계층 구조를 통과하여 현재 컨텍스트에서 name 을 찾을 수 없는 경우 상위 컨텍스트에서 검색합니다. 또한 사용자가 설정했을 수 있는 contextObject()도 고려합니다.
setContextProperty(), objectForName(), nameForObject() 및 contextObject()도 참조하세요 .
QQmlEngine *QQmlContext::engine() const
컨텍스트의 QQmlEngine 또는 컨텍스트에 QQmlEngine 이 없거나 QQmlEngine 이 파괴된 경우 nullptr
을 반환합니다.
bool QQmlContext::isValid() const
컨텍스트가 유효한지 여부를 반환합니다.
컨텍스트가 유효하려면 엔진이 있어야 하며, 엔진이 있는 경우 contextObject()이 삭제되지 않아야 합니다.
QString QQmlContext::nameForObject(const QObject *object) const
이 컨텍스트에서 object 의 이름을 반환하거나 컨텍스트에 object 이름이 없는 경우 빈 문자열을 반환합니다. 개체의 이름은 setContextProperty() 또는 컨텍스트 개체의 속성으로 지정하거나 QML로 만든 컨텍스트의 경우 id로 지정합니다.
객체에 이름이 여러 개 있는 경우 첫 번째 이름이 반환됩니다.
contextProperty()와 달리 이 메서드는 컨텍스트 계층 구조를 통과하지 않습니다. 현재 컨텍스트에서 이름을 찾을 수 없는 경우 빈 문자열이 반환됩니다.
contextProperty() 및 objectForName()도 참조하세요 .
[since 6.2]
QObject *QQmlContext::objectForName(const QString &name) const
이 컨텍스트에서 주어진 name 에 대한 객체를 반환합니다. 컨텍스트에서 name 을 사용할 수 없거나 name 과 연결된 값이 QObject 이 아닌 경우 nullptr을 반환합니다. 객체의 이름은 setContextProperty(), 컨텍스트 객체의 속성 또는 QML 생성 컨텍스트의 경우 ids로 지정됩니다. contextProperty ()와 달리 이 메서드는 컨텍스트 계층 구조를 통과하지 않습니다. 현재 컨텍스트에서 이름을 찾을 수 없으면 nullptr이 반환됩니다.
이 함수는 Qt 6.2에 도입되었습니다.
contextProperty() 및 nameForObject()도 참조하십시오 .
QQmlContext *QQmlContext::parentContext() const
컨텍스트의 부모 QQmlContext 또는 이 컨텍스트에 부모가 없거나 부모가 파괴된 경우 nullptr
을 반환합니다.
QUrl QQmlContext::resolvedUrl(const QUrl &src) const
포함된 컴포넌트의 URL을 기준으로 src URL을 확인합니다.
QQmlEngine::baseUrl() 및 setBaseUrl()도 참조하세요 .
void QQmlContext::setBaseUrl(const QUrl &baseUrl)
resolvedUrl()가 baseUrl 에 대한 상대 참조에 사용할 URL을 명시적으로 설정합니다.
이 함수를 호출하면 기본적으로 사용되는 포함 컴포넌트의 URL이 재정의됩니다.
baseUrl() 및 resolvedUrl()도 참조하세요 .
void QQmlContext::setContextObject(QObject *object)
컨텍스트 설정 object.
참고: 컨텍스트 객체를 사용하여 QML 컴포넌트에 값을 삽입해서는 안 됩니다. 대신 싱글톤 또는 일반 객체 속성을 사용하세요.
contextObject()도 참조하세요 .
void QQmlContext::setContextProperties(const QList<QQmlContext::PropertyPair> &properties)
이 컨텍스트에서 일괄적으로 properties 을 설정합니다.
모든 속성을 한 번에 설정하면 불필요한 새로 고침 표현식을 피할 수 있으므로 각 개별 속성마다 setContextProperty()를 호출하는 대신 이 방법을 사용하는 것이 좋습니다.
참고: 컨텍스트 프로퍼티를 사용하여 QML 컴포넌트에 값을 삽입해서는 안 됩니다. 대신 싱글톤 또는 일반 객체 속성을 사용하세요.
QQmlContext::setContextProperty()도 참조하세요 .
void QQmlContext::setContextProperty(const QString &name, QObject *value)
이 컨텍스트에서 name 속성의 value 을 설정합니다.
QQmlContext 는 value 의 소유권을 갖지 않습니다.
참고: 컨텍스트 프로퍼티를 사용하여 QML 컴포넌트에 값을 삽입해서는 안 됩니다. 대신 싱글톤 또는 일반 객체 속성을 사용하세요.
contextProperty()도 참조하세요 .
void QQmlContext::setContextProperty(const QString &name, const QVariant &value)
이 컨텍스트에 name 속성의 value 을 설정합니다.
참고: 컨텍스트 속성을 사용하여 QML 컴포넌트에 값을 삽입해서는 안 됩니다. 대신 싱글톤 또는 일반 객체 속성을 사용하세요.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.