如何在QML中加载新屏幕,显示基于先前用户点击输入的新列表?

时间:2015-02-26 12:58:02

标签: qt listview qml

在我的应用程序中,我显示了一个嵌套列表,它将组和文件夹显示为其子项。我已经构建了必要的函数,以便根据用户点击的项目在c ++的后端生成一个新列表。

我已经具备了通过QProperty将列表传递给qml的必要功能。

所以我的问题是,我以前的列表视图如何动态显示新的列表视图。考虑到也应该可以单击“返回”按钮,该按钮应该再次加载显示组和文件夹的上一页。

这是我现在的代码,显示了组及其子组件(文件夹)

import QtQuick 2.4
import QtQuick.Window 2.2
//import ListMode 1.0

Rectangle {
    height: 250
    width: 140
    color: "pink"



    //property var aNum: 0

    Component {
        id: folderDelegate

        Item {
            width: 140
            height: col2.childrenRect.height

            Column {
                id: col2
                anchors.left: parent.left
                anchors.right: parent.right


                Rectangle {
                    height: 20
                    width: parent.width
                    border.color: "black"

                    MouseArea {
                        anchors.fill: parent
                        onClicked: treemodel.getObject(model.ID + ":" + model.Name)

                    }

                    Text {
                        anchors.horizontalCenter: parent.horizontalCenter
                        anchors.verticalCenter: parent.verticalCenter
                        id: name1
                        text: model.Name
                    }
                }
            }
        }
    }

    ListView {
        id: outer
        model: myModel
        delegate: groupsDelegate
        anchors.fill: parent
    }

    Component {
        id: groupsDelegate

        Item {
            width: 140
            height: col.childrenRect.height

            Column {
                id: col
                anchors.left: parent.left
                anchors.right: parent.right

                Text {
                    anchors.horizontalCenter: parent.horizontalCenter
                    id: t1
                    font.bold: true
                    font.underline: true
                    font.pointSize: 9
                    text: model.Name
                }

                ListView {
                    id: folderlist
                    model: treemodel.lists[treemodel.modIndex]
                    delegate: folderDelegate
                    contentHeight: contentItem.childrenRect.height
                    height: childrenRect.height
                    anchors.left: parent.left
                    anchors.right: parent.right
                    clip: true
                }
            }
        }
    }
}

我一直在阅读文档和搜索论坛,但信息非常庞大。因此,赞赏正确方向的指针。

1 个答案:

答案 0 :(得分:0)

为每个项目设置主模型以拥有自己的唯一ID。因此,当单击某个项目时,我会运行一个函数,该函数根据单击的ID +名称来抓取并存储该项目

MouseArea {
   anchors.fill: parent

   onClicked :{
     treemodel.getObject(model.ID + ":" + model.Name)
     stackView.push(Qt.resolvedUrl("content/ButtonPage.qml"))     
   }
}

接下来,基于单击的项目,我有函数填充加载到ButtonPage.qml中的不同QList项。

调用的c ++函数是:

Q_INVOKABLE void getObject(QString index) {
    clickedItemID = index;
    getClickedItem();
    getFilesByFolder();
}

现在,我不确定这是否是一个好的解决方案。但对我来说这很有效。也许它也适用于其他人。