首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态“交互式”中断“QSwipeView”绑定的Qt currentIndex

动态“交互式”中断“QSwipeView”绑定的Qt currentIndex
EN

Stack Overflow用户
提问于 2019-12-12 13:13:43
回答 1查看 453关注 0票数 3

我正在尝试创建一个SwipeView,其中第一个页面具有interactive属性false,而其他页面则启用了它。我试图实现的效果是让主页具有指向其他页面的链接,但其他页面只能返回到主页(如iOS设置菜单)。

问题是,在第一个更改页之后,currentIndex属性丢失绑定,导致SwipeView中断。

下面是应用程序输出:

代码语言:javascript
复制
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

代码语言:javascript
复制
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:

  • 点击页面2
  • 向左滑动。
  • 再次单击页面2

有什么解决这个问题的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-13 11:36:33

我是还在调查这个,但是现在您应该能够通过延迟交互属性的分配来解决这个问题:

代码语言:javascript
复制
onCurrentIndexChanged: {
    if (currentIndex === 0) {
        Qt.callLater(function() { interactive = false })
    } else {
        Qt.callLater(function() { interactive = true })
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59305450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档