Qt TableView中的委托FolderListModel

Qt TableView中的委托FolderListModel,qt,qml,qt5,qtquick2,Qt,Qml,Qt5,Qtquick2,我正在学习Qt快速制作文件管理器,但我一般没有QML或GUI方面的经验。第一步是使用FolderListModel列出文件夹的内容。我使用ListView获得了该工作,但自然地,除了名称之外,我还想显示多个字段,例如大小、时间等。因此,我考虑使用TableView 但是,我不清楚如何在TableView中将每个条目作为一行委派。目前我只是使用itemdegate来显示fileName,结果是在每一行中,所有列都重复条目的名称。因此,我认为这是正确的方法,但我如何为此制作适当的委托组件?从概念上讲

我正在学习Qt快速制作文件管理器,但我一般没有QML或GUI方面的经验。第一步是使用
FolderListModel
列出文件夹的内容。我使用
ListView
获得了该工作,但自然地,除了名称之外,我还想显示多个字段,例如大小、时间等。因此,我考虑使用
TableView

但是,我不清楚如何在
TableView
中将每个条目作为一行委派。目前我只是使用
itemdegate
来显示
fileName
,结果是在每一行中,所有列都重复条目的名称。因此,我认为这是正确的方法,但我如何为此制作适当的委托
组件
?从概念上讲,我想指定一个字段数组,例如与表列相对应的
[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
                    }
                }
            }
        }
    }
}
其中提到了以下角色:

  • 列表项
  • 文件名
  • 文件路径
  • fileURL(从Qt5.2开始)
  • fileBaseName
  • 文件缓冲
  • 文件大小
  • 文件修改
  • 文件访问
  • fileIsDir
因此,您不需要自定义委托来显示该信息,只需适当设置
TableViewColumn
role
属性即可:

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
                    }
                }
            }
        }
    }
}