Qt ListView位置视图索引()不工作
我在一个QML项目中有两个Qt ListView位置视图索引()不工作,qt,listview,qml,Qt,Listview,Qml,我在一个QML项目中有两个ListViews,它们都运行在同一个模型上。我试图让他们从不同的索引开始(模型以2liselements开始)。为此,我在组件完成时调用positionviewatinex: ListView { model: mymodel Component.onCompleted: positionViewAtIndex(1,ListView.Beginning) //... } 但是,这两个ListView实际上都没有定位到所需的索引。有什么我没做的
ListView
s,它们都运行在同一个模型上。我试图让他们从不同的索引开始(模型以2liselement
s开始)。为此,我在组件完成时调用positionviewatinex
:
ListView {
model: mymodel
Component.onCompleted: positionViewAtIndex(1,ListView.Beginning)
//...
}
但是,这两个ListView
实际上都没有定位到所需的索引。有什么我没做的吗?对于这个问题,我看到的唯一解决方案是确保在列表视图完成之前不调用该方法,但我正在这样做
我使用的是Qt 5.2/QtQuick 2.0
编辑:在使用其他定位器功能后,我发现它们都不起作用。我还发现更改currentIndex
也不起作用。此外,我还发现,currentIndex
并没有随着视图的改变而改变--onCurrentIndexChanged
永远不会被触发。或者,您可以将currentIndex设置为1,所以我找到了答案。事实证明,ListView
在它担心自己的属性之前实例化了它的委托……因此,在ListView
设置自己的维度之前,委托只读取了ListView
的宽度。当代理在视图方向上的宽度/高度属性等于零时,调用positionviewatinex()
时,视图将不知道滚动到何处。因此,要解决此问题,必须使用条件绑定:
Component {
id: myDelegate
Item {
width: ListView.view.width == 0 ? 480 /*or some preset*/ : ListView.view.width
}
}
这将给代理一个非零宽度,并导致positionviewatinex()
函数工作
当然,如果您的ListView
是垂直的,那么您需要设置height
属性,而不是width
属性。正如我在问题中指出的(编辑后),更改currentIndex
完全没有任何作用。此外,手动更改视图的位置不会触发onCurrentIndexChanged
信号…使用qtquick 1.1进行快速测试后,仅当我将ListView高度设置为小于视口所需的高度时,它才起作用。如果你打开远光灯,CurrentIndexChanged信号将起作用。这两个都不适用于我…我应该指出-我使用的是QtQuick 2.0(Qt 5.2),但我不认为这是问题的原因。我用QtQuick2和QtQuick1组件对其进行了测试。onCompleted:positionViewAtIndex(1,ListView.Start)
do对我有用。请注意,我没有将视图定位为显示空白。你能展示一下适合你的代码吗?