获取当前显示的委托的索引 - QML ListView
Posted
技术标签:
【中文标题】获取当前显示的委托的索引 - QML ListView【英文标题】:Get index of the delegate currently displayed - QML ListView 【发布时间】:2014-09-29 12:56:42 【问题描述】:我创建了一个 ListView,它显示了用户定义的几页内容(纯文本)。显示的页面是一个委托。一次只能看到一页。我决定用它来捕捉一个项目,就像 ios 启动器的工作方式一样。用户只需在页面之间滑动即可。 (这是在触摸屏上使用的)
我需要有当前显示页面的索引才能进行某些操作。 ListView 的 currentIndex 始终保持 == 0。我怎样才能得到它?
对于喜欢代码的人:
ListView
onCurrentIndexChanged: console.log(currentIndex) // this gets called only once - at startup
delegate: Column
// The page displayed, only one page at a time
谢谢
【问题讨论】:
【参考方案1】:有很多方法可以获取屏幕上显示的当前项目的索引。如果可以获取当前页面的x-y坐标,可以在ListView中使用indexAt方法。
并且在每个委托中,您可以在委托范围内使用index
角色找到索引。 index
就像您在模型中声明的角色,由 ListView 自动分配。例如,
ListView
delegate: Column
property int indexOfThisDelegate: index
//...
index
角色介绍here:
代表也可以使用包含模型中项目索引的特殊索引角色。请注意,如果从模型中删除项目,则此索引设置为 -1...
另一种方法是显式地为 ListView 中的currentItem
属性赋值,这样视图就可以自己滚动了。这是 Qt 文档中的一个简单的example,与您的应用程序类似。
【讨论】:
即使我创建了int
属性,我也无能为力,因为我无法以编程方式读取该页面。我将不得不研究其他两个选项。 ObjectModel 示例没有说明 currentItem
糟糕,最后一个链接不包含完整的代码。您可以找到示例代码here。
有没有办法根据窗口中的x,y找出内容中的x,y?我总是知道当前项目在窗口中的哪个位置,但我不知道如何找出内容中当前页面的 x,y(如果我知道的话,我可以很容易地算术计算当前页面(它们都是大小相同))
如果你的view只显示一个delegate,你可以试试ListView的contentX和contentY属性,继承自Flickable。
分配属性完全符合预期。在我的情况下,它归结为对所有事情都明确的强迫需要。只是到处写“index”而不是“itemId.currentIndex”让我的眼睛抽搐。【参考方案2】:
你可以这样做:
QModelIndex index =this->indexAt(event->pos());
this ->setCurrentIndex(index);
【讨论】:
【参考方案3】:您可以使用 ListView 类 (ListView) 的附加属性。它们附加到委托的每个实例。
参见 ListView.isCurrentItem 或 ListView.view 示例:
列表显示 宽度:180;身高:200 零件 id: 联系人代表 长方形 id: 包装 宽度:180 高度:contactInfo.height 颜色: ListView.isCurrentItem ? “黑红” 文本 id: 联系人信息 文字:姓名+“:”+号码 颜色: wrapper.ListView.isCurrentItem ? “红黑” 模型:ContactModel 代表:contactsDelegate 重点:真【讨论】:
【参考方案4】:我知道这已经很老了,但我遇到了同样的问题,并花了一些时间试图找到一种方法来获取适合我的 currentIndex。就我而言,有时我需要更改 ListView 的宽度,因此每次调整大小时都必须手动重新计算 currentIndex。
但我找到了highlightRangeMode 属性。当它设置为ListView.StrictlyEnforceRange
时,currentIndex 总是自动更新并包含当前可见项的正确索引。
ListView
highlightRangeMode: ListView.StrictlyEnforceRange
// ...
【讨论】:
以上是关于获取当前显示的委托的索引 - QML ListView的主要内容,如果未能解决你的问题,请参考以下文章
QML PathView:通过鼠标滚轮更改路径视图的当前索引