2015-11-04 82 views
2

我正在學習使用Qt Quick來創建文件管理器,但我一般沒有QML或GUI的經驗。第一步是使用FolderListModel列出文件夾的內容。我得到example code工作使用ListView,但自然我想顯示多個字段除了名稱,例如大小,時間等等。因此,我正在考慮使用TableView在TableView中委託FolderListModel

但是,我不清楚如何將每個條目委託爲TableView中的一行。目前,我只是簡單地使用itemDelegate來顯示fileName,結果是在每一行中,所有列重複條目的名稱。所以我認爲rowDelegate是正確的方法,但是如何爲此目的制定合適的代表Component?從概念上說,我想指定一個字段數組,例如對應於表格列的[model.fileName, model.fileSize]。這是可以實現的嗎?

爲了澄清我張貼下面的代碼:

import QtQuick 2.4 
import QtQuick.Controls 1.4 
import QtQuick.Dialogs 1.2 
import QtQuick.Layouts 1.1 
import Qt.labs.folderlistmodel 2.1 

ApplicationWindow { 
    visible: true 
    width: 900 
    height: 600 
    title: qsTr("Hello World") 

    Item { 
     anchors.fill: parent 

     width: 900 
     height: 600 

     SplitView { 
      id: splitView1 
      anchors.fill: parent 

      TabView { 
       id: tabView1 
       width: splitView1.width/2 

       Tab { 
        title: qsTr("Home") 

        TableView { 
         id: tableView1 
         width: splitView1.width/2 

         TableViewColumn { 
          role: "name" 
          title: qsTr("Name") 
          width: tableView1.width * 0.75 
         } 

         TableViewColumn { 
          role: "size" 
          title: qsTr("Size") 
          width: tableView1.width * 0.25 
         } 

         FolderListModel { 
          id: folderModel2 
          folder: "file:/home/username" 
          nameFilters: ["*"] 
          showHidden: true 

         } 

         Component { 
          id: fileDelegate2 
          Text { 
           text: model.fileName 
          } 
         } 

         model: folderModel2 
         itemDelegate: fileDelegate2 
        } 
       } 
      } 
     } 
    } 
} 

回答

2

documentation提到了以下角色可用:

  • 列表項
  • 文件名
  • 文件路徑
  • fileURL(自Qt 5.2開始)
  • fileBaseName
  • fileSuffix
  • 檔案大小
  • 修改的文件
  • fileAccessed
  • fileIsDir

所以你不需要定製代表顯示該信息,只需設置roleTableViewColumn的性質:

import QtQuick 2.4 
import QtQuick.Controls 1.4 
import QtQuick.Dialogs 1.2 
import QtQuick.Layouts 1.1 
import Qt.labs.folderlistmodel 2.1 

ApplicationWindow { 
    visible: true 
    width: 900 
    height: 600 
    title: qsTr("Hello World") 

    Item { 
     anchors.fill: parent 

     width: 900 
     height: 600 

     SplitView { 
      id: splitView1 
      anchors.fill: parent 

      TabView { 
       id: tabView1 
       width: splitView1.width/2 

       Tab { 
        title: qsTr("Home") 

        TableView { 
         id: tableView1 
         width: splitView1.width/2 

         TableViewColumn { 
          role: "fileName" 
          title: qsTr("Name") 
          width: tableView1.width * 0.75 
         } 

         TableViewColumn { 
          role: "fileSize" 
          title: qsTr("Size") 
          width: tableView1.width * 0.25 
         } 

         FolderListModel { 
          id: folderModel2 
          folder: "file:/home/username" 
          nameFilters: ["*"] 
          showHidden: true 

         } 

         model: folderModel2 
        } 
       } 
      } 
     } 
    } 
}