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