2012-07-06 49 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控件會自動出現。