В соответствии с документами Qt я должен быть в состоянии позвонить:
Заменить предмет (цель, предмет, свойства, операция)
Заменяет один или несколько элементов в стеке указанным элементом и операцией и при необходимости применяет набор свойств для элемента. Элементом может быть Элемент, Компонент или URL. Возвращает элемент, который стал текущим.
Поэтому, если бы я принял:
stackView.replace(stackView.get(stackView.depth - 3), mycomponent)
Я бы ожидал, что элемент, расположенный в индексе stackView 2, меньше, чем самый большой индекс, заменить на mycomponent
. Однако, это не так; кажется, что индексы depth - 1
и depth - 2
и depth - 3
выталкиваются из стека, затем добавляется экземпляр mycomponent
. Как заменить индекс depth - 3
без потери объектов с большим количеством элементов?
MVP: В следующем коде, если I push
, push
, push
, тогда replace
, я ожидаю, что Depth at onCompleted: 4
будет значением Current Index: 1
. Вместо этого я получаю Depth at onCompleted: 2
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
Window {
visible: true
width: 640
height: 480
id: window
Component {
id: mycomponent
Row {
spacing: 2
Button {
text: "Push"
onClicked: push(mycomponent)
}
Button {
text: "Pop"
onClicked: pop()
}
Button {
text: "Replace"
onClicked: stackView.replace(stackView.get(stackView.depth - 3), mycomponent)
}
Text {
text: "Current Index: " + (stackView.depth - 1)
}
Text {
Component.onCompleted: text = "Depth at onCompleted: " + stackView.depth
}
}
}
StackView {
id: stackView
initialItem: mycomponent
}
}