我正在尝试创建一个SwipeView,其中第一个页面具有interactive
属性false,而其他页面则启用了它。我试图实现的效果是让主页具有指向其他页面的链接,但其他页面只能返回到主页(如iOS设置菜单)。
问题是,在第一个更改页之后,currentIndex
属性丢失绑定,导致SwipeView中断。
下面是应用程序输出:
qrc:/main.qml:10:5: QML SwipeView: Binding loop detected for property "currentIndex"
file:///home/rcc/Qt/5.12.6/gcc_64/qml/QtQuick/Controls.2/SwipeView.qml:49:18: QML ListView: Binding loop detected for property "currentIndex"
下面是默认的滑动视图应用程序(QtCreator -> New -> Qt快速应用程序- Swipe) main.qml
import QtQuick 2.12
import QtQuick.Controls 2.5
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Tabs")
SwipeView {
id: swipeView
anchors.fill: parent
currentIndex: tabBar.currentIndex
interactive: false
onCurrentIndexChanged: {
if (currentIndex === 0) {
interactive = false
} else {
interactive = true
}
}
Page1Form {}
Page2Form {}
}
footer: TabBar {
id: tabBar
currentIndex: swipeView.currentIndex
TabButton {
text: qsTr("Page 1")
}
TabButton {
text: qsTr("Page 2")
}
}
}
要复制这个bug:
有什么解决这个问题的建议吗?
发布于 2019-12-13 11:36:33
我是还在调查这个,但是现在您应该能够通过延迟交互属性的分配来解决这个问题:
onCurrentIndexChanged: {
if (currentIndex === 0) {
Qt.callLater(function() { interactive = false })
} else {
Qt.callLater(function() { interactive = true })
}
}
https://stackoverflow.com/questions/59305450
复制相似问题