递归地遍历FolderListModel(QML)中的委托地图

时间:2013-05-08 12:07:46

标签: qt qml subdirectory

我正在使用QML为Ubuntu Touch创建一个音乐播放器,因为我是QML的新手,所以我会感谢一些帮助。

该应用程序可以播放所选目录中列出的曲目,但该目录还显示文件夹,我希望列出所有子目录中的所有文件,而不是只显示根目录中的曲目。

但我真的不知道该怎么做。 FolderListModel是一个可能可以使用的isFolder方法,但我不知道如何使用。或者使用某种功能通过选定的目标。

我来到这个帖子qml FolderListModel,但它没有给我任何东西。

这是当前列出我的曲目的代码:

            Column {
                anchors.centerIn: parent
                anchors.fill: parent
                ListView {
                    id: musicFolder
                    FolderListModel {
                        id: folderModel
                        folder: musicDir
                        nameFilters: ["*.ogg","*.mp3","*.oga","*.wav"]
                    }
                    width: parent.width
                    height: parent.height
                    model: folderModel
                    delegate: ListItem.Subtitled {
                        text: fileName
                        subText: "Artist: "
                        onClicked: {
                            console.debug('Debug: User pressed '+musicDir+fileName)
                            playMusic.source = musicDir+fileName
                            playMusic.play()
                        }
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

您需要一个代理模型,以递归方式展平嵌套项。这种代理模型的一个例子是KDescendantsProxyModel(我也是using it)。

或者,您可以通过递归遍历文件系统(或让某些现有类为您执行此操作)构建与特定模式匹配的文件列表,并将结果提供给其他更简单的模型。这样做的缺点是无法轻松显示更新。