2015-11-04 4 views
2

Я изучаю Qt Quick для создания файлового менеджера, но у меня нет опыта работы с QML или графическим интерфейсом в целом. Первый шаг - перечислить содержимое папки, используя FolderListModel. Я получил example code, используя ListView, но, естественно, я хочу отображать несколько полей в дополнение к имени, например. размер, время и т. д. Таким образом, я думаю об использовании TableView.Делегировать FolderListModel в TableView

Однако мне не ясно, как делегировать каждую запись в виде строки в 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 упоминает о том, что следующие роли доступны:

  • пункт Список
  • FileName
  • Filepath
  • fileURL (начиная с Qt 5.2)
  • fileBaseName
  • fileSuffix
  • FileSize
  • fileModified
  • fileAccessed
  • fileIsDir

Так что вам не нужно иметь пользовательские делегаты, чтобы отобразить эту информацию, просто установите role: TableViewColumn Соответственно:

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 
        } 
       } 
      } 
     } 
    } 
} 
Смежные вопросы