이 페이지에서

QQmlPropertyMap Class

QQmlPropertyMap 클래스를 사용하면 QML 바인딩에서 사용할 수 있는 키-값 쌍을 설정할 수 있습니다. 더 보기...

헤더: #include <QQmlPropertyMap>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
상속: QObject

공개 함수

virtual ~QQmlPropertyMap() override
void clear(const QString &key)
bool contains(const QString &key) const
int count() const
(since 6.1) void freeze()
(since 6.1) void insert(const QVariantHash &values)
void insert(const QString &key, const QVariant &value)
bool isEmpty() const
QStringList keys() const
int size() const
QVariant value(const QString &key) const
QVariant &operator[](const QString &key)
QVariant operator[](const QString &key) const

신호

void valueChanged(const QString &key, const QVariant &value)

정적 공용 멤버

QQmlPropertyMap *create(QObject *parent = nullptr)

보호된 함수

QQmlPropertyMap(DerivedType *derived, QObject *parent)
virtual QVariant updateValue(const QString &key, const QVariant &input)

상세 설명

QQmlPropertyMap은 도메인 데이터를 UI 계층에 노출하는 편리한 방법을 제공합니다. 다음 예제는 C++에서 데이터를 선언한 후 QML에서 해당 데이터에 접근하는 방법을 보여줍니다.

C++ 파일에서:

// create our data
QQmlPropertyMap ownerData;
ownerData.insert("name", QVariant(QString("John Smith")));
ownerData.insert("phone", QVariant(QString("555-5555")));

// expose it to the UI layer
QQuickView view;
QQmlContext *ctxt = view.rootContext();
ctxt->setContextProperty("owner", &ownerData);

view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();

다음으로, ` main.qml`에서:

Text { text: owner.name + " " + owner.phone }

바인딩은 동적으로 이루어집니다. 키의 값이 업데이트될 때마다 해당 키에 바인딩된 모든 항목도 함께 업데이트됩니다.

UI 계층에서 발생한 값 변경을 감지하려면 valueChanged() 신호에 연결하면 됩니다. 단, insert() 또는 clear()를 호출하여 변경을 가할 때는 valueChanged()가 발생하지 않으며, QML에서 값이 업데이트될 때만 발생한다는 점에 유의하십시오.

참고: 맵에서 키를 제거할수는 없습니다. 키가 추가된 후에는 해당 키와 연관된 값을 수정하거나 지울 수만 있습니다.

참고: QQmlPropertyMap에서 클래스를 파생할때는 , 해당 클래스가 Qt 메타 객체 시스템에 올바르게 등록되도록 보장하는 protected two-argument constructor 를 사용하십시오.

참고: QQmlPropertyMap의 메타객체( QMetaObject )는 동적으로 생성 및 수정됩니다. 해당 메타 객체에 대한 연산은 스레드 안전하지 않으므로, 애플리케이션에서는 메타 객체에 대한 액세스를 명시적으로 동기화해야 합니다.

멤버 함수 문서

[protected] template <typename DerivedType> QQmlPropertyMap::QQmlPropertyMap(DerivedType *derived, QObject *parent)

부모 객체 parent 를 사용하여 바인딩 가능한 맵을 생성합니다. 이 생성자는 QQmlPropertyMap에서 파생된 클래스에서 사용해야 합니다.

derived 의 타입은 메타 객체 시스템에 속성 맵을 등록하는 데 사용되며, 이는 파생 클래스의 속성에 접근할 수 있도록 보장하기 위해 필요합니다. 이 타입은 반드시 QQmlPropertyMap에서 파생되어야 합니다.

C++ 파일에서:

class MyQmlPropertyMap : public QQmlPropertyMap
{
    Q_OBJECT
    QML_NAMED_ELEMENT(MyQmlPropertyMap)
public:
    explicit MyQmlPropertyMap(QObject *parent = nullptr)
        : QQmlPropertyMap(this, parent)
    {
        insert("name", "John Smith");
        insert("phone", "555-5555");
        insert("email", "john.smith@example.com");
    }

public slots:
    void updateEmail(const QString &newEmail)
    {
        insert("email", newEmail);
    }
};
    QQuickView view;
    view.setSource(QUrl("qrc:/main.qml"));
    view.show();

그런 다음, ` main.qml`에서:

MyQmlPropertyMap
{
    id : owner
    Component.onCompleted: { owner.updateEmail("new.email@example.com") }
}
Text { text : owner.name + " " + owner.phone + " " + owner.email }

[override virtual noexcept] QQmlPropertyMap::~QQmlPropertyMap()

바인딩 가능한 맵을 삭제합니다.

void QQmlPropertyMap::clear(const QString &key)

key 에 연결된 값(있는 경우)을 지웁니다.

bool QQmlPropertyMap::contains(const QString &key) const

맵에 ` key`가 포함되어 있으면 true를 반환합니다.

size()도 참조하십시오 .

int QQmlPropertyMap::count() const

size()와 동일합니다.

[static] QQmlPropertyMap *QQmlPropertyMap::create(QObject *parent = nullptr)

parent 를 부모 객체로 하는 바인딩 가능한 맵을 생성합니다.

[since 6.1] void QQmlPropertyMap::freeze()

이 속성 맵에 더 이상 속성을 추가할 수 없게 합니다. 기존 속성은 수정하거나 지울 수 있습니다.

이에 따라 기존 속성에 대해 내부 캐시가 활성화되어 QML에서 더 빠르게 액세스할 수 있게 됩니다.

이 기능은 Qt 6.1에서 도입되었습니다.

[since 6.1] void QQmlPropertyMap::insert(const QVariantHash &values)

values 를 QQmlPropertyMap 에 삽입합니다.

존재하지 않는 키는 자동으로 생성됩니다.

이 메서드는 insert(key, value) 를 연속해서 여러 번 호출하는 것보다 훨씬 빠릅니다.

이 함수는 Qt 6.1에서 도입되었습니다.

void QQmlPropertyMap::insert(const QString &key, const QVariant &value)

key 에 연결된 값을 value 로 설정합니다.

해당 키가 존재하지 않으면 자동으로 생성됩니다.

bool QQmlPropertyMap::isEmpty() const

맵에 키가 하나도 없으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

size()도 참조하십시오 .

[invokable] QStringList QQmlPropertyMap::keys() const

키 목록을 반환합니다.

지워진 키는 관련 값이 유효하지 않은 QVariant인 경우에도 이 목록에 계속 표시됩니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.

int QQmlPropertyMap::size() const

맵에 포함된 키의 개수를 반환합니다.

isEmpty() 및 count()도 참조하십시오 .

[virtual protected] QVariant QQmlPropertyMap::updateValue(const QString &key, const QVariant &input)

key 키에 저장될 새로운 값을 반환합니다. 이 함수는 QML에서 속성 업데이트를 가로채기 위해 제공되며, 이때 QML에서 제공되는 값은 input 입니다.

이 함수를 재정의하여 속성 값이 업데이트될 때 해당 값을 조작할 수 있습니다. 이 함수는 QML에서 값이 업데이트될 때만 호출된다는 점에 유의하십시오.

QVariant QQmlPropertyMap::value(const QString &key) const

key 에 연결된 값을 반환합니다.

이 키에 값이 설정되어 있지 않거나(또는 값이 지워진 경우) 유효하지 않은 QVariant 가 반환됩니다.

[signal] void QQmlPropertyMap::valueChanged(const QString &key, const QVariant &value)

이 신호는 맵 내의 값 중 하나가 변경될 때마다 발생합니다. ` key `는 변경된 ` value `에 해당하는 키입니다.

참고: insert() 또는 clear()을 호출하여 변경을 가한 경우에는valueChanged ()가 발생하지 않으며, QML에서 값이 업데이트될 때만 발생합니다.

QVariant &QQmlPropertyMap::operator[](const QString &key)

key 키와 연관된 값을 수정 가능한 참조로 반환합니다.

맵에 key 키를 가진 항목이 없는 경우, 이 함수는 key 키를 가진 유효하지 않은 QVariant 를 맵에 삽입하고, 이에 대한 참조를 반환합니다.

insert() 및 value()도 참조하십시오 .

QVariant QQmlPropertyMap::operator[](const QString &key) const

value()과 동일합니다.

이 함수는 오버로드된 함수입니다.

© 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.