如何在 QML 中加载一个新屏幕,显示基于先前用户点击输入的新列表?
how to load a new screen in QML showing a new list based on previous user click input?
在我的应用程序中,我显示了一个嵌套列表,它将组和文件夹显示为其子项。我已经构建了必要的功能,可以根据用户点击的项目在后端用 C++ 生成新列表。
我已经具备通过 QProperty 将列表传递给 qml 的必要功能。
所以我的问题是,如何动态显示以前的列表视图和新列表视图。考虑到也应该可以单击按钮 "back",这应该会再次加载前一页显示组和文件夹。
这是我现在的代码,显示组及其子项(文件夹)
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
}
}
}
}
}
我一直在阅读文档和搜索论坛,但信息非常多。因此,将不胜感激指向正确方向的指针。
主模型设置为每个项目都有自己唯一的 ID。因此,当一个项目被点击时,我 运行 一个根据被点击的 ID + 名称抓取并存储该项目的函数
MouseArea {
anchors.fill: parent
onClicked :{
treemodel.getObject(model.ID + ":" + model.Name)
stackView.push(Qt.resolvedUrl("content/ButtonPage.qml"))
}
}
接下来,根据被点击的项目,我有填充不同 QList 项目的功能,这些项目被加载到 ButtonPage.qml。
调用的c++函数是:
Q_INVOKABLE void getObject(QString index) {
clickedItemID = index;
getClickedItem();
getFilesByFolder();
}
现在,我不确定这是否是一个好的解决方案。但对我来说它有效。也许它也适用于其他人。
在我的应用程序中,我显示了一个嵌套列表,它将组和文件夹显示为其子项。我已经构建了必要的功能,可以根据用户点击的项目在后端用 C++ 生成新列表。
我已经具备通过 QProperty 将列表传递给 qml 的必要功能。
所以我的问题是,如何动态显示以前的列表视图和新列表视图。考虑到也应该可以单击按钮 "back",这应该会再次加载前一页显示组和文件夹。
这是我现在的代码,显示组及其子项(文件夹)
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
}
}
}
}
}
我一直在阅读文档和搜索论坛,但信息非常多。因此,将不胜感激指向正确方向的指针。
主模型设置为每个项目都有自己唯一的 ID。因此,当一个项目被点击时,我 运行 一个根据被点击的 ID + 名称抓取并存储该项目的函数
MouseArea {
anchors.fill: parent
onClicked :{
treemodel.getObject(model.ID + ":" + model.Name)
stackView.push(Qt.resolvedUrl("content/ButtonPage.qml"))
}
}
接下来,根据被点击的项目,我有填充不同 QList 项目的功能,这些项目被加载到 ButtonPage.qml。
调用的c++函数是:
Q_INVOKABLE void getObject(QString index) {
clickedItemID = index;
getClickedItem();
getFilesByFolder();
}
现在,我不确定这是否是一个好的解决方案。但对我来说它有效。也许它也适用于其他人。