QQmlContext Class
QQmlContext 클래스는 QML 엔진 내의 컨텍스트를 정의합니다. 더 보기...
| 헤더: | #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 |
(since 6.11) QList<QQmlContext *> | childContexts() const |
| QObject * | contextObject() const |
| QVariant | contextProperty(const QString &name) const |
| QQmlEngine * | engine() const |
(since 6.11) QObject * | findObjectRecursively(const QString &id) const |
(since 6.11) QList<QObject *> | findObjectsRecursively(const QString &id) 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 문서를 향후 읽게 될 독자에게도 보이지 않습니다. 이 데이터는 여러분이 구상하는 특정 C++ 컨텍스트에서 QML 컴포넌트가 인스턴스화될 때만 노출됩니다. 다른 곳에서는 대신 다른 컨텍스트 데이터가 노출될 수 있습니다.
QML 컴포넌트에 데이터를 노출하기 위해 QML 컨텍스트를 사용하는 대신, 데이터를 저장할 추가 객체 속성을 생성하거나 ` singletons`을 사용해야 합니다. 자세한 설명은 ‘C++ 상태를 QML에 노출하기’를 참조하십시오.
각 QQmlContext에는 QObject 속성과는 별개로, 이름을 통해 데이터를 컨텍스트에 명시적으로 바인딩할 수 있게 해주는 일련의 속성이 포함되어 있습니다. 컨텍스트 속성은 QQmlContext::setContextProperty()를 호출하여 정의하고 업데이트할 수 있습니다.
대규모 데이터 세트의 바인딩 및 관리를 간소화하기 위해, QQmlContext에 컨텍스트 객체를 설정할 수 있습니다. 컨텍스트 객체의 모든 속성은 마치 QQmlContext::setContextProperty() 호출을 통해 개별적으로 추가된 것처럼, 컨텍스트 내에서 이름으로 사용할 수 있습니다. 속성 값의 변경 사항은 해당 속성의 notify 신호를 통해 감지됩니다. 컨텍스트 객체를 설정하는 것은 컨텍스트 속성 값을 수동으로 추가하고 관리하는 것보다 더 빠르고 쉽습니다.
QQmlContext::setContextProperty()를 통해 명시적으로 추가된 모든 속성은 컨텍스트 객체의 속성보다 우선합니다.
자식 컨텍스트는 부모의 컨텍스트 속성을 상속받습니다. 자식 컨텍스트가 부모에 이미 존재하는 컨텍스트 속성을 설정하면, 새로운 컨텍스트 속성이 부모의 속성을 덮어씁니다.
경고: 해당 컨텍스트에서 객체가 생성된 후에 컨텍스트 객체를설정하거나 새로운 컨텍스트 속성을 추가하는것은 비용이 많이 드는 작업입니다(본질적으로 모든 바인딩을 재평가하도록 강제하기 때문입니다). 따라서 컨텍스트 속성을 사용해야 하는 경우, 컨텍스트를 사용하여 객체를 생성하기 전에 최소한 컨텍스트의 "설정"을 완료해야 합니다.
멤버 함수 문서
QQmlContext::QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr)
주어진 ` parentContext`와 ` QObject `( parent)를 사용하여 새로운 `QQmlContext`를 생성합니다.
QQmlContext::QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)
engine 의 루트 컨텍스트 아래에 새로운 QQmlContext를 생성하고, QObject parent 를 설정합니다.
[override virtual noexcept] QQmlContext::~QQmlContext()
QQmlContext 를 파기합니다.
이 컨텍스트에 의존하는 모든 표현식이나 하위 컨텍스트는 무효화되지만, 삭제되지는 않습니다( QQmlContext 객체의 자식인 경우는 제외).
QUrl QQmlContext::baseUrl() const
컴포넌트의 기본 URL을 반환하며, 기본 URL이 설정되어 있지 않은 경우에는 해당 컴포넌트를 감싸고 있는 상위 컴포넌트를 반환합니다.
setBaseUrl()도 참조하십시오 .
[since 6.11] QList<QQmlContext *> QQmlContext::childContexts() const
컨텍스트의 직계 자식 QQmlContexts를 반환합니다.
이 함수는 Qt 6.11에서 도입되었습니다.
parentContext(), findObjectRecursively() 및 findObjectsRecursively()도 참조하십시오 .
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 `를 반환합니다.
[since 6.11] QObject *QQmlContext::findObjectRecursively(const QString &id) const
이 컨텍스트와 그 하위 컨텍스트를 재귀적으로 검색하여 ID가 id 인 객체를 찾습니다. 해당 객체가 발견되면 그 객체를 반환합니다. 그렇지 않은 경우 nullptr 를 반환합니다.
주어진 컨텍스트 내에서 지정된 id 을 가진 객체는 단 하나만 존재할 수 있지만, 하나의 문서 내에서 뷰(views)나 델리게이트(delegates) 등을 통해 여러 개의 컨텍스트를 생성할 수 있습니다. 이러한 각 컨텍스트는 지정된 id 을 가진 객체를 포함할 수 있습니다. 여기서는 가장 먼저 발견된 객체만 반환됩니다. 검색은 폭우선 탐색(breadth-first search) 방식으로 수행됩니다.
이 함수는 Qt 6.11에서 도입되었습니다.
findObjectsRecursively(), objectForName(), childContexts()도 참조하십시오 .
[since 6.11] QList<QObject *> QQmlContext::findObjectsRecursively(const QString &id) const
이 컨텍스트와 그 자식 노드를 재귀적으로 검색하여 ID가 id 인 객체를 찾습니다. 해당 객체들의 목록을 반환합니다.
주어진 컨텍스트 내에서는 지정된 id 를 가진 객체가 하나만 존재할 수 있지만, 예를 들어 뷰(views)나 델리게이트(delegates)를 통해 하나의 문서 내에 여러 개의 컨텍스트를 생성할 수 있습니다. 이러한 각 컨텍스트는 지정된 id 를 가진 객체를 포함할 수 있습니다.
이 함수는 Qt 6.11에서 도입되었습니다.
findObjectRecursively(), objectForName(), childContexts()도 참조하십시오 .
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로 생성된 컨텍스트의 경우 ID를 통해 지정됩니다. contextProperty()와 달리, 이 메서드는 컨텍스트 계층 구조를 탐색하지 않습니다. 현재 컨텍스트에서 이름을 찾을 수 없는 경우 nullptr이 반환됩니다.
이 함수는 Qt 6.2에서 도입되었습니다.
contextProperty() 및 nameForObject()도 참조하십시오 .
QQmlContext *QQmlContext::parentContext() const
컨텍스트의 상위 객체 QQmlContext 를 반환하거나, 해당 컨텍스트에 상위 객체가 없거나 상위 객체가 소멸된 경우에는 nullptr 를 반환합니다.
QUrl QQmlContext::resolvedUrl(const QUrl &src) const
src URL을 해당 컴포넌트의 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 컴포넌트에 값을 주입하기 위해 컨텍스트 속성을 사용해서는 안됩니다 . 대신 싱글톤이나 일반 객체 속성을 사용하십시오.
© 2026 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.