QML:如果使用异步父 Loader 内的加载器或 repater 填充 swipeview,则当前索引/项目会发生变化

问题描述 投票:0回答:1

将数据动态加载到异步加载的 QML SwipeView 中会自动增加当前索引。

Loader{
    asynchronous: true
    anchors.fill: parent
    sourceComponent:  ColumnLayout{
        //Any content here that can take some time to load
        TabBar{
            Layout.fillWidth: true
            Repeater{
                model: swRepeater.model
                delegate: TabButton{
                    text: "Tab button "+index
                }
            }
        }

        SwipeView{
            //                    anchors.fill: parent
            Layout.fillWidth: true
            Layout.fillHeight: true
            currentIndex: 0
            Repeater{
                id: swRepeater
                model: 5
                delegate: Item{
                    Label{
                        anchors.centerIn: parent
                        text: qsTr("Test "+index)
                    }
                }
            }
            onCurrentIndexChanged: {
                console.debug("Index was modified to ",currentIndex)
            }
        }
    }
}

加载数据结束时,当前项目和索引将为 4,而不是预期的 0。

还显示堆栈中的最后一项。

在 TabBar 项上也可以看到相同的行为,因此问题看起来来自 ListView 或 Container。

对此行为有什么建议吗?

qt qml qtquickcontrols2
1个回答
0
投票

我打印了当前索引的值,当Loader设置为异步时,当前索引在component.onCompleted中不断增加

我为模型初始化添加了一个计时器,问题就消失了。

    Timer {
        id: initTimer
        running: false
        interval: 100
        repeat: false
        onTriggered: {
            accountTabBarRepeater.model = accountModel
            accountRepeater.model = accountModel
        }
    }
    Component.onCompleted: initTimer.start()
© www.soinside.com 2019 - 2024. All rights reserved.