2014-07-15 70 views
0

我在QML項目中有兩個ListView,它們都運行在同一模型中。我試圖讓他們從不同的指數開始(模型以2 ListElement s開頭)。爲了做到這一點,我打電話positionViewAtIndex當該組件完成:ListView positionViewAtIndex()不起作用

ListView { 
    model: mymodel 
    Component.onCompleted: positionViewAtIndex(1,ListView.Beginning) 
    //... 
} 

然而,無論ListView實際上被定位在所需的索引。有沒有我沒有做的事情?我已經看到這個問題的唯一解決方案是確保您在ListView完成之前不會調用該方法,但我正在這樣做。

我正在使用Qt 5.2/QtQuick 2.0。

編輯:在玩過其他定位器函數後,我發現它們都沒有工作。我也發現改變currentIndex也不起作用。此外,我發現currentIndex沒有被改變的觀點 - onCurrentIndexChanged從未被解僱。

回答

0

所以,我想通了。事實證明,ListView實例化它的代表之前,它擔心自己的屬性......所以代表只讀ListView的寬度,然後ListView設置其自己的尺寸。當委託在視圖的方向上具有寬度/高度屬性等於零時,當調用positionViewAtIndex()時,視圖將不知道滾動到哪裏。因此,爲了解決這個問題,你必須使用一個條件約束:

Component { 
    id: myDelegate 
    Item { 
     width: ListView.view.width == 0 ? 480 /*or some preset*/ : ListView.view.width 
    } 
} 

這會給委託非零寬度,並導致positionViewAtIndex()功能工作。

當然,如果你的ListView是垂直的,那麼你需要設置height屬性而不是width屬性。

0

或者,你可以設置currentIndex爲1

+0

正如我在我的問題中指出的(在我編輯它之後),更改'currentIndex'完全沒有。此外,手動更改視圖的位置不會觸發'onCurrentIndexChanged'信號... – hal7df

+0

使用qtquick 1.1進行快速測試後,只有在將ListView高度設置爲小於視口所需的高度時才起作用。 CurrentIndexChanged信號將起作用,如果你打開突出顯示 – nib

+0

這些都不適合我...我應該指出 - 我正在使用QtQuick 2.0(Qt 5.2),但我不認爲這將是問題的原因。 – hal7df