私は垂直リストビューを持っています。アイテムをクリックすると、水平リストビューが表示されます。問題は、2番目のアイテムをクリックすると、2番目のアイテムが水平方向のリストビューに表示されるはずです。ここでは、私の実装です:Qt QMLリストビューpositionViewAtIndexが機能しない
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
ApplicationWindow {
id: root
visible: true
width: 640
height: 480
title: qsTr("Hello World")
StackView {
id: rootStackView
anchors.fill: parent
initialItem: verListView
}
VListview {
id: verListView
onListItemClicked: {
rootStackView.push(horListView)
horListView.init(index)
}
}
HListView {
id: horListView
visible: false
}
}
VListview.qml
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
Page {
id: root
signal listItemClicked(var index)
ListView {
id: listView
anchors.fill: parent
Layout.fillWidth: true
model: ListModel {
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
}
delegate: Component {
id: contactDelegate
Item {
MouseArea {
anchors.fill: parent
onClicked: {
console.log("aaa")
root.listItemClicked(index)
}
}
width: listView.width; height: 40
Column {
Text { text: '<b>Name:</b> ' + name }
Text { text: '<b>Number:</b> ' + number }
}
}
}
}
}
HListview.qml
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
Page {
function init(index) {
console.log(index)
horizontalListView.currentIndex = index;
horizontalListView.positionViewAtIndex(index, ListView.Beginning)
}
ListView {
id: horizontalListView
anchors.fill: parent
orientation: ListView.Horizontal
model: ListModel {
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
}
snapMode: ListView.SnapToItem
delegate: Component {
id: contactDelegate
Item {
width: horizontalListView.width; height: 40
Column {
Text { text: '<b>Name:</b> ' + name }
Text { text: '<b>Number:</b> ' + number }
}
}
}
}
}
HorizontalL istView
私は2番目と3番目の項目をクリックしていますが、それは常に最初の項目を表示します。誰もが問題に直面した?ありがとうございます。
多くのアイテムがある場合は、期待通りに動作します。ビューを埋めるのに十分なアイテムがある場合にのみ、選択したアイテムがビューの上部に表示されます。最後の項目をビューの一番上にドラッグすると、ビュー境界から外れているために戻って戻ります – dtech
3つの項目では不十分ですか?もしそうなら、私のプロジェクトモデルには60アイテムありますが、それでもまだ動作していないので、そうは思わないでしょう。 – nAkhmedov
StackViewがまだビジー状態のときに 'positionViewAtIndex'を呼び出せないように見えます(http://doc.qt。 io/qt-5/qml-qtquick-controls2-stackview.html#busy-prop)(但し、Qt docはこれについて何も言及していません)。 Transitionが終了した後、 'horListView.init(index)'を呼び出すようにしてください。 – mcchu