Qt ListView位置视图索引()不工作

Qt ListView位置视图索引()不工作,qt,listview,qml,Qt,Listview,Qml,我在一个QML项目中有两个ListViews,它们都运行在同一个模型上。我试图让他们从不同的索引开始(模型以2liselements开始)。为此,我在组件完成时调用positionviewatinex: ListView { model: mymodel Component.onCompleted: positionViewAtIndex(1,ListView.Beginning) //... } 但是,这两个ListView实际上都没有定位到所需的索引。有什么我没做的

我在一个QML项目中有两个
ListView
s,它们都运行在同一个模型上。我试图让他们从不同的索引开始(模型以2
liselement
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对我有用。请注意,我没有将视图定位为显示空白。你能展示一下适合你的代码吗?