QML Java-从事件处理程序访问委托项

QML Java-从事件处理程序访问委托项,java,qt,qml,ubuntu-touch,Java,Qt,Qml,Ubuntu Touch,如何从ListView的事件处理程序访问ListView委托中的Text.Text项,下面的示例代码(可能有语法错误) 由于无法从事件处理程序访问文本,因此我的代码不起作用。如何设置文本值 编辑:完整性: 我可以通过java代码(在应用程序加载期间)将项目添加到ListView,通过代码访问事件中ListView中的值 mainLView.model.append({'name': "First Value","city":"London"}); var myValue = model.get(

如何从ListView的事件处理程序访问ListView委托中的Text.Text项,下面的示例代码(可能有语法错误)

由于无法从事件处理程序访问文本,因此我的代码不起作用。如何设置文本值

编辑:完整性: 我可以通过java代码(在应用程序加载期间)将项目添加到ListView,通过代码访问事件中ListView中的值

mainLView.model.append({'name': "First Value","city":"London"});
var myValue = model.get(currentIndex).city // or name
但是我仍然找不到一种方法来为委托文本{Text:'}值赋值

7月10日编辑 下面是一个更完整的代码示例,说明了我试图实现的目标

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: nameX
      }
    }
    Component.onCompleted: {
        for (var x=1; x < 99; x++) {
            var data = {'nameX': "Name: " + x, "numberX":x};
            mainModel.append(data);
        }
    }
    onMovementEnded {
        //here I want to set the value to numberX e.g (this does not work)
        theText.text = mainView.model.get(currentIndex).numberX
    } 
}
ListView{
id:mainLView
模型:ListModel{id:mainModel}
代表:矩形{
id:因此
正文{
id:文本
文本:nameX
}
}
Component.onCompleted:{
对于(变量x=1;x<99;x++){
变量数据={'nameX':“Name:+x,”numberX::x};
mainModel.append(数据);
}
}
移动结束{
//这里我想将值设置为numberX,例如(这不起作用)
text.text=mainView.model.get(currentIndex).numberX
} 
}

为列表视图委托中的文本(文本元素)指定字符串值。可以使用模型的属性名称

像下面这样。这里的名称来自Jason对象{'name':“First Value”,“city:“London”})

查看此链接()它会有所帮助


顺便说一句,若要从委托中获取文本,您需要从模型中获取文本,但无法从委托中获取文本,因为委托是listview中可重用的元素,其值不断变化。

若要在列表视图委托中为文本(文本元素)指定字符串值,请执行以下操作。可以使用模型的属性名称

像下面这样。这里的名称来自Jason对象{'name':“First Value”,“city:“London”})

查看此链接()它会有所帮助


顺便说一句,要从委托中获取文本,您需要从模型中获取文本,而不能从委托中获取文本,因为委托是listview中可重用的元素,其值不断更改。

listview有一个属性currentItem,可用于访问当前索引中的项。要从委托访问某些内容,委托的顶级项中需要有一个属性,因为只有这些属性才对外公开。像这样的方法应该会奏效:

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      property alias text: theText.text
      Text {
         id: theText
         text: nameX
      }
    }

    onMovementEnded {
        mainLView.currentItem.text = "foo";
    } 
}

ListView有一个属性currentItem,可用于访问当前索引中的项。要从委托访问某些内容,委托的顶级项中需要有一个属性,因为只有这些属性才对外公开。像这样的方法应该会奏效:

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      property alias text: theText.text
      Text {
         id: theText
         text: nameX
      }
    }

    onMovementEnded {
        mainLView.currentItem.text = "foo";
    } 
}

鉴于您的评论,我认为以下内容可以满足您的要求

delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: mainLView.moving ? nameX : numberX
      }
    }

当ListView移动时,这应该显示其中一个值,当它不移动时,则显示另一个值。

鉴于您的评论,我认为以下内容可能会满足您的需要

delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: mainLView.moving ? nameX : numberX
      }
    }

当ListView移动时,这应该显示其中一个值,当ListView不移动时,则显示另一个值。

Kunal,您错过了问题。在我上面的编辑中,我提到我已经使用java设置了文本,我想从事件处理程序内部设置(更合适地更改)“text:name”的值,即onMovementEndedok,然后您需要在modelKunal中获取元素索引和更新项,这就是问题所在。你如何得到上面代码中的文本索引?Kunal,你错过了这个问题。在我上面的编辑中,我提到我已经使用java设置了文本,我想从事件处理程序内部设置(更合适地更改)“text:name”的值,即onMovementEndedok,然后您需要在modelKunal中获取元素索引和更新项,这就是问题所在。如何获得上面代码中的文本索引?这个问题很难回答,因为它不清楚您实际想要从示例中得到什么。ListView为每个ListModel元素呈现一个委托。您是在询问如何使用值更新每个元素,还是询问如何更新特定的元素?这个问题实际上似乎归结为如何指定要编辑的元素。一旦你给了我们这些信息,帮助你获取和更新它的索引就变得微不足道了。Deadron,谢谢你的评论。我想在移动结束时更新索引处的值(上面的代码很简短,但说明了问题)。我想在信号内移动结束时更新索引处的值(从而更新listview)。我的完整代码实际上对listmodel中的每个元素都有两个项;我想在listview滚动时显示一个值,在它停止时显示另一个值,但为了简洁起见,我缩减了上面的代码,只显示我需要帮助的地方。如果你想要一个更完整的代码示例,请告诉我。我已经用一个更完整的代码示例更新了问题。这个问题很难回答,因为不清楚你到底想要从示例中得到什么。ListView为每个ListModel元素呈现一个委托。您是在询问如何使用值更新每个元素,还是询问如何更新特定的元素?这个问题实际上似乎归结为如何指定要编辑的元素。一旦你给了我们这些信息,帮助你获取和更新它的索引就变得微不足道了。Deadron,谢谢你的评论。我想在移动结束时更新索引处的值(上面的代码很简短,但说明了问题)。我想在信号内移动结束时更新索引处的值(从而更新listview)。我的完整代码实际上对listmodel中的每个元素都有两个项;我想在listview滚动时显示一个值,在它停止时显示另一个值,但为了简洁起见,我缩减了上面的代码,只显示我需要帮助的地方。如果你想要一个更完整的代码示例,请告诉我。我已经用一个更完整的代码示例更新了问题。这做得非常优雅!事实上,我之前在谷歌上搜索过,得到了一个