1

{Qml の初心者 (Qt 5.1 ベータ版を使用したクイック 2.0) と学習}。

そのようなイディオムが Qml で可能かどうか知りたかった: 以下に objLeftColumn があります。これは、その子がブール値の m_bIsSelected と MouseArea エイリアス m_mouseProperty を公開することを期待し、それらを使用して、そのような子のコレクションを相互に排他的にします。つまり、1 つだけです。それらのうち、選択状態にすることができます。フォローインは正常に機能しますが、必要なたびに、特に行などで必要な場合は繰り返す必要があります.

Column {
        id: objLeftColumn

        property int m_iLastButtonClicked: -1
        property int m_iCurrentButtonClicked: -1

        onM_iCurrentButtonClickedChanged: {
            if(m_iLastButtonClicked != -1) {
                objLeftColumn.children[m_iLastButtonClicked].m_bIsSelected = false
            }
            m_iLastButtonClicked = m_iCurrentButtonClicked
        }

        Repeater {
            id: objLeftColumnRepeater

            model: 5

            delegate: ABCD {
                id: objABCD

                m_mouseProperty.onClicked: {
                    if(m_bIsSelected) {
                        objLeftColumn.m_iCurrentButtonClicked = index
                    }
                    else {
                        objLeftColumn.m_iLastButtonClicked = -1
                        objLeftColumn.m_iCurrentButtonClicked = -1
                    }
                }
            }
        }
}

指定された項目を列に配置しながら、選択範囲の排他性を処理できる汎用の objLeftColumn (別の qml ファイル) を作成できますか?

コンポーネントをその場でデリゲートに渡すのではなく、後でコンポーネントをインスタンス化するたびに (上下のモデルの数値に応じて) デリゲートを渡します。

たとえば、疑似コードでは次のようになります。

Exclusive.qml で:

Column {
        id: objLeftColumn

        property int m_iLastButtonClicked: -1
        property int m_iCurrentButtonClicked: -1
        property alias m_delegate: objLeftColumnRepeater.delegate

        onM_iCurrentButtonClickedChanged: {
            if(m_iLastButtonClicked != -1) {
                objLeftColumn.children[m_iLastButtonClicked].m_bIsSelected = false
            }
            m_iLastButtonClicked = m_iCurrentButtonClicked
        }

        Repeater {
            id: objLeftColumnRepeater

            model: 5

           onItemAdded: {
               //state of item can be manipulated but want to
               //add behaviour to the item eg:
            /*item {
                 m_mouseProperty.onClicked: {
                 //do something
                 }
           }*/
           }
        }
}

SomeOther.qml で:

Exclusive {
    model: 5
    delegate: ABCD
}

Exclusive {
    model: 9
    delegate: DEFG
}

など..したがって、このように Column in Exclusive はより一般的であり、そのデリゲートに割り当てられた任意のアイテムで呼び出すことができ、同様に動作します。これはqmlで可能ですか

4

1 に答える 1