在TableView中委托FolderListModel

时间:2015-11-04 04:12:20

标签: qt qml qt5 qtquick2

我正在学习Qt Quick来创建文件管理器,但我一般没有QML或GUI的经验。第一步是使用FolderListModel列出文件夹的内容。我使用ListView使example code工作,但我自然希望除了名称之外还显示多个字段,例如大小,时间等。因此,我正在考虑使用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
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

documentation提到以下角色可用:

  
      
  • 列表项
  •   
  • 文件名
  •   
  • 文件路径
  •   
  • fileURL(自Qt 5.2起)
  •   
  • fileBaseName
  •   
  • fileSuffix
  •   
  • 档案大小
  •   
  • 修改的文件
  •   
  • 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
                    }
                }
            }
        }
    }
}