このページでは

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 からクラスを派生させる場合は 、protected two-argument constructor を使用してください。これにより、クラスが Qtメタオブジェクトシステムに正しく登録されます。

注: 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.