多项目swipedelegate

时间:2017-02-25 17:51:14

标签: qt qml

由于初始发布不足而编辑。

您好,

感谢您的帮助!

你是对的,我想包括整个文件更好,尽管大小:

import QtQuick 2.5
import QtQuick.LocalStorage 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Controls 2.1
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.0
import QtQuick.Controls.Material 2.1
import "./database.js" as Database

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    id: appWindow
    x: Screen.width / 2 - width / 2
    y: Screen.height / 2 - height / 2
    title: qsTr("Project Stats")
    Material.theme: Material.Dark

    ListModel {
        id: projectModel
        ListElement {
            projectID: "123654"
            manager: "Schneider"
            sponsor: "3466"
        }
    }

    Component {
        id: projectDelegate
        SwipeDelegate {
            id: projectSwipeDelegate
            width: parent.width
            height: projectDelegateItem.implicitHeight
            anchors.horizontalCenter: parent.horizontalCenter
            spacing: 10

            contentItem: Item {
                id: projectDelegateItem
                Text {
                    id: projectID_text
                    text: "Project ID: " + projectID
                    font.pointSize: 20
                    anchors.horizontalCenter: parent.horizontalCenter
                    font.weight: Font.Black
                    color: "white"
                }

                Text {
                    id: manager_text
                    text: 'Manager: ' + manager + "  Sponsor: " + sponsor
                    anchors.top: projectID_text.bottom
                    anchors.horizontalCenter: parent.horizontalCenter
                    font.weight: Font.Thin
                    color: "lightgrey"
                }
            }


            onClicked: {
                console.log(index, projectModel.get(index).projectID)
                if (swipe.complete)
                    projectModel.remove(index)
                else {
                    //var component= Qt.createComponent("timepointsstackview.qml")
                    //var loadwin = component.createObject(appWindow)
                    //loadwin.selected_project = projectModel.get(index).projectID
                    //                    stackView.push(Qt.resolvedUrl("timepointsstackview.qml"), {properties: {selected_project: projectModel.get(index).projectID}})
                    stackView.push(component, {properties: {selected_project: projectModel.get(index).projectID}})
                }
            }
            swipe.right: Label {
                id: deleteLabel
                text: qsTr("Delete")
                color: "white"
                verticalAlignment: Label.AlignVCenter
                padding: 12
                height: parent.height
                anchors.right: parent.right

                SwipeDelegate.onClicked: projectListView.model.remove(index)

                background: Rectangle {
                    color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
                }
            }
        }
    }

    Item {
        Component.onCompleted: {
            Database.getDatabase()
            Database.getProjects()
        }
    }

    StackView {
        id: stackView
        anchors.fill: parent
        // Implements back key navigation
        focus: true
        Keys.onReleased: if (event.key === Qt.Key_Back && stackView.depth > 1) {
                             stackView.pop();
                             event.accepted = true;
                         }
        initialItem: Item {
            width: parent.width
            height: parent.height

            ListView {
                id: projectListView
                anchors.fill: parent
                clip: true

                model: projectModel
                delegate: projectDelegate
            }
        }

    }

    onClosing: {
        if (Qt.platform.os == "android") {
            close.accepted = false;
            //        if (stack.depth > 1) stack.pop();
        }
    }
}

与此同时,我已经删除了行/列的内容,我把它放进去以某种方式工作,尽管我没有它。

我还在初步发布之前尝试了隐含高度,但遗憾的是无济于事。以上是我目前的代码,虽然输入

height: projectDelegateItem.implicitHeight

在那个地方(可能不是正确的一个或错误的引用?不得不从你的建议中改变它,因为我已经取出了行)导致只在一个地方渲染。

感谢您到目前为止的时间,如果您仍然有耐心告诉我在哪里转动螺丝......

1 个答案:

答案 0 :(得分:0)

好的,首先: 严肃对待警告。如果qml告诉你,你不应该尝试在行或列中使用锚点,不要这样做!

  

QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row. Row will not function.

     

QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column. Column will not function.

如果你看不到那些警告,也不要这样做。它会陷入困境。 一行自动将所有子项并排固定在一起。一栏也是如此,只是水平。如果你搞砸了,一切都会破裂。

坦率地说:我甚至不明白你为什么要使用这个奇怪的Row / Column-Setup。 对于你的情况,似乎更好地采取锚定。如果你有理由,为什么不采取网格?

其次:您需要为委托指定高度。不幸的是,它似乎并不计算隐含高度。 SwipeDelegate根据implcitHeight的{​​{1}}计算自己的implicitHeight

问题是,您没有将行(具有正确的contentItem)分配为 implicitHeight,而是将其添加为子项。< / p>

将其指定为contentItem会为您解决此问题。

关于您的修改和删除行: 您现在使用的contentItem不会根据其子项计算Item。所以你需要自己提供计算。

这将为您的代表设置适当的高度,您的代表不会重叠。

implicitHeight