QML,Qt 5.11:使用SwipeView代替SwipeDelegate

时间:2018-06-30 00:43:52

标签: qt qml swipe

我有一个SwipeView,内部有一个带有SwipeDelegate的中继器。问题是,有时我在滑动重复项时将其注册为我想要的SwipeDelegate上的滑动,但有时将其注册为SwipeView上的滑动并更改了我不想要的页面。下面的代码为清楚起见。

总有优先权给SwipeDelegate,因此它总是比SwipeView拥有优先权吗?还是实施这种嵌套的滑动区域只是不好的做法?

我尝试使用代码中所示的z顺序,但这无济于事。

TabBar {
    id: appTabBar
    contentContainer: swipeView

    TabButton {
        text: "Add History"
    }

    TabButton {
        text: "View History"
    }
}

QC2.SwipeView {
    id: swipeView
    anchors.top: appTabBar.bottom
    anchors.bottom: parent.bottom
    width: parent.width
    clip: true
    z: 1

    Item {}

    Item {

        Column {
            id: table
            width: parent.width
            spacing: 3

            Repeater {
                id: foodTableRepeater
                height: dp(20)
                model: []
                delegate: QC2.SwipeDelegate {
                    id: swipeDelegate
                    width: parent.width

                    Rectangle {
                        height: parent.height
                        width: parent.width
                        color: (index % 2 === 0) ? "#D3F2FF" : "#FFFFFF"
                        border.color: "blue"
                        border.width: dp(1)
                        z: 2

                        Row {
                            height: parent.height
                            width: parent.width
                            AppText {
                                id: date
                                leftPadding: dp(10)
                                width: parent.width
                                anchors.verticalCenter: parent.verticalCenter
                                text: JSFuns.getLocaleDateTime(app.locale, modelData[2], app.use_24)
                            }
                        }
                    }

                    swipe.right: QC2.Label {
                        id: deleteLabel
                        verticalAlignment: QC2.Label.AlignVCenter
                        padding: 5
                        width: parent.width * 0.4 / 3
                        height: parent.height
                        anchors.right: parent.right
                        z: 3
                        Icon {
                            width: parent.width
                            anchors.verticalCenter: parent.verticalCenter
                            icon: IconType.close
                            size: parent.height
                            color: "red"
                        }

                        QC2.SwipeDelegate.onClicked: console.debug(index)

                        background: Rectangle {
                            color: deleteLabel.QC2.SwipeDelegate.pressed ?
                                       Qt.darker(app.color_secondary_light, 1.1) :
                                       app.color_secondary_light
                        }
                    }
                }
            }
        }   
    }
}

1 个答案:

答案 0 :(得分:0)

我认为我得到了一个似乎运行良好的修复程序。我修改了SwipeDelegate,如下所示:

delegate: QC2.SwipeDelegate {
    id: swipeDelegate
    width: parent.width
    onPressed: swipeView.interactive = false // New line
    onCanceled: swipeView.interactive = true // New line

添加的这两行代码只是打开和关闭SwipeView,在与SwipeDelegate进行交互时将其关闭,并在用户完成操作后重新打开。

到目前为止,唯一的缺点是我无法通过向右滑动Swip​​eDelegate来使用SwipeView。但是,这很小。