4

私は Qt/QML コーディングが初めてで、リストビューのリストデリゲートの要素へのアクセスに関して 1 つの問題に直面しています。

たとえば、私のQmlがこのように見える場合

Item
{
 id: item_id
 property int focus_id: 0

 function setFocusImageSource() {}

 ListView
 {
  id: listView_Id
  delegate: listViewdelegate
  model: listModeldata
 }

 Component
 {
  id: listViewdelegate
  Rectangle
  {
   id: rectangle_id
   Image
   {
    id: focus_Image
    source: x.x
   }
  }
 }

 ListModel
 {
   id: listModeldata
   /*elements*/
 } 
} 

これで、リスト ビューの基本機能が私のコード (上記のコードではない) で正常に動作するようになりましたが、特定の操作を行うときは、焦点を合わせている Image を変更する必要があります。関数「setFocusImageSource()」を使用して変更したい。focus_Image.source = "xx" を使用して画像ソースを直接設定しようとしました。

Rectangle コンポーネント内の Image はデリゲートに対してローカルであり、ITEM タグからアクセスできないようですか。もしそうなら、上記の機能から画像を設定するにはどうすればよいですか。

前もって感謝します。

チャンドM

4

1 に答える 1

4

C++ の QML コンポーネントに対応するのはクラスです。ご存知のように、メンバーの値はクラスのインスタンス (オブジェクト) でのみ変更できます。同じことがコンポーネントにも当てはまります。コンポーネントでは何も変更できません。そのインスタンスでのみ変更できます。問題を解決するには、次の 2 つの可能性があります。

  1. listViewdelegate のプロパティを、それ以外のプロパティ (item_id または listView_Id などのプロパティ) にバインドします。
  2. listViewdelegate のプロパティを listModeldata の要素のプロパティにバインドします。

例:

Image {
    id: focus_Image
    source: x.x // defualt value
    Connections {
        target: item_id
        onFocus_idChanged: {
            if ( /* some logic if needed */ ) {
                focus_Image.source = xx;
            }
        }
    }
}

また

Image {
    id: focus_Image
    source: {
        // inidicator is a property of the element of listModeldata
        if (indicator) { 
            return xx;
        }
    }
}
于 2012-08-11T18:36:08.583 に答える