2012-07-06 78 views
2

我已经创建了一个正常的标签栏,并在我的SD卡上显示来自特定目录的列表视图中的音乐文件。我希望在目录下载新文件时更新列表。但是因为我已经在标签栏中显示了列表,所以在开始时加载qml。我该如何强调这一点?在标签栏布局中更新列表视图ShowML QML

+1

您可以添加一个定时器来更新您的(QML ListModel)模型,或者在C++端实现一个模型,并使用Timer定时器。无论你选择什么,当模型更新时,ListView也会更新。 – mlvljr 2012-07-06 10:54:26

+0

我正在使用FolderListModel。它没有清晰的()函数...其他ListModels有。请你可以给我代码来使用FolderListmodel来刷新我的列表吗?谢谢 – SoH 2012-07-06 11:01:12

+0

嗯,我现在没有太多时间,但可能是您可以在计时器事件上创建新模型并将其交换到视图中? – mlvljr 2012-07-06 12:03:29

回答

1

如果这是一个选项,我会抓住QtQuick 2.0实现并使用它。它会自动对文件夹中的更改做出反应。

否则,您将别无选择,只能重新创建模型。

import QtQuick 1.1 
import Qt.labs.folderlistmodel 1.0 

ListView { 
    id: view 
    model: folderModel 
    delegate: Text { text: fileName } 

    property variant folderModel 
    function updateModel() { 
     var folder = "" 
     if (folderModel) { 
      folder = folderModel.folder 
      folderModel.destroy() 
     } 
     folderModel = modelComponent.createObject(view, {"folder": folder}) 
    } 

    Component { 
     id: modelComponent 
     FolderListModel {} 
    } 

    Component.onCompleted: updateModel() 
} 

丑,但它的作品。

+0

我在标签栏布局中使用了列表视图。所以ListView的Component.onCompleted()函数在列表视图完成时只会被调用一次。 – SoH 2012-07-19 06:30:50

+0

初始模型在Component.onCompleted中创建。每当你想刷新视图时,你都需要调用updateModel()。 – MartinJ 2012-07-19 10:08:03

0

貌似FolderListModel自动更新列表,一旦新的文件被添加或删除路径:(Qt5.7.1)

ListView 
    { 
     id:myListViewUSB 
     anchors.fill: parent 

     FolderListModel 
     { 
      id: folderModelUSB 
      folder: "file:///mnt/usb" 
     } 
     model: folderModelUSB 

     delegate: 
     Text 
     { 
      text: fileName 
      anchors.horizontalCenter: parent.horizontalCenter 
     } 
    } 

我加入,并在我的文件夹中删除文件testet和它的ListView控件会自动出现。