4

我是 Qt / QML 编码的新手,我在访问列表视图中的列表委托中的元素时遇到了一个问题。

例如,如果我的 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*/
 } 
} 

现在列表视图的基本功能在我的代码(不是上面的代码)中运行良好,但是当我执行特定操作时,我需要更改聚焦图像。我想使用函数 "setFocusImageSource()" 来改变它。我尝试使用 focus_Image.source = "xx" 直接设置图像源。

是否像 Rectangle 组件内的 Image 是委托本地的,不能从 ITEM 标记访问。如果是这样我如何从上面提到的功能中设置图像。

提前致谢。

钱德M

4

1 回答 1

4

C++ 中 QML 组件的对应物是一个类。如您所知,您只能在类的实例(对象)中更改成员的值。组件也是如此:您不能更改组件中的任何内容 - 只能在其实例中更改。有两种方法可以解决您的问题:

  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 回答