QML でオブジェクトのプロパティにプロパティ名でアクセスする方法

この記事は Qt Advent Calendar 2019 3日目の記事です。

解決したい問題

QML で使うデータの API が、配列的になっているべきにも関わらず、data.a1, data.a2, data.a3 のような名前になっている場合が稀によくあります。

エクセルか何かの定義を元に API が自動生成されている場合なんかにありがちです。

その場合でも、QML 側ではかっこよく対応したいですよね?

プロパティ名でアクセスする方法

import QtQuick 2.12

MouseArea {
    id: root
    width: 100
    height: 100

    property string a0: 'value of a0'
    property string a1: 'value of a1'
    property string a2: 'value of a2'

    Column {
        anchors.centerIn: parent
        Repeater {
            model: 3
            Text {
                text: root['a%1'.arg(model.index)]
            }
        }
    }
    onClicked: Qt.quit()
}

というわけで、object[‘プロパティ名’] の形式でアクセスをしましょう。

おすすめ