2

QtQuick 2.0 と QML ListView を使用していくつかの項目を表示していますが、ユーザーがいつ別の項目を選択したかを知る必要があります。ユーザーがデリゲートのマウス領域をクリックしたときに信号を発する、つまり

MouseArea{
    onClicked: {
                 controller.itemChanged(model.item);
                 someList.currentIndex = index;
   }
}

ただし、ユーザーがマウスを使用してアイテムを選択した場合のみですが、ユーザーが矢印キーを使用した場合は機能しません。

ドキュメントを調べて、currentIndexが変更されたときにどの信号が発せられるかを調べましたが、何も見つからないようです。似たようなものを探していますQListWidget::itemSelectionChanged()が、QML ListView にはそれがないようです。

4

3 に答える 3

2

あなただけの必要onCurrentItemChanged:{}がありますListView

于 2015-09-04T11:08:23.397 に答える
0

この質問を参照してください。あなたが取ることができる2つのアプローチがあります

  1. 別のコンポーネントのイベントに接続する
  2. そのコンポーネント内でイベントを処理する

シグナル ハンドラは、シグナルの最初の文字を大文字にして名前が付けられますon<SignalName>

于 2014-09-09T03:24:35.760 に答える
0

キーが押されたときに信号を発火できるように、キーボードの動作を再実装し、デリゲートからモデル データを公開する必要がありました。

ListView {
    id: myList
    focus: true
    orientation: "Horizontal" //This is a horizontal list
    signal itemChanged(var item)
    interactive: false //Disable interactive so we can re-implement key behaviour
    Keys.onPressed: {
                if (event.key == Qt.Key_Left){
                    myList.decrementCurrentIndex(); //Change the current list selection
                    itemChanged(myList.currentItem.selectedItem.data); //Fire signal notifying that the selectedItem has changed
                }
                else if (event.key == Qt.Key_Right){
                    myList.incrementCurrentIndex(); //Change the current list selection
                    itemChanged(myList.currentItem.selectedItem.data); //Fire signal notifying that the selectedItem has changed
                }
            }

    delegate: Component {
        Rectangle {
            id: myItem
            property variant selectedItem: model //expose the model object

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    myList.currentIndex = index; //Change the current selected item to the clicked item
                    itemChanged(model.data); //Fire signal notifying that the selectedItem has changed
                }
            }
        }
    }
}

このソリューションでは、ユーザーがアイテムをクリックするかキーを押すたびに、QML のアイテムを手動で変更する必要があります。これが最適な解決策になるかどうかはわかりませんがGridViewListView.

于 2014-04-07T02:55:09.147 に答える