赞
踩
QFileSystemModel
类:Qt帮助中的介绍为:
The QFileSystemModel class provides a data model for the local filesystem.
This class provides access to the local filesystem, providing functions for renaming and removing files and directories, and for creating new directories. In the simplest case, it can be used with a suitable display widget as part of a browser or filter.
QFileSystemModel can be accessed using the standard interface provided by QAbstractItemModel, but it also provides some convenience functions that are specific to a directory model. The fileInfo(), isDir(), fileName() and filePath() functions provide information about the underlying files and directories related to items in the model. Directories can be created and removed using mkdir(), rmdir().
Note: QFileSystemModel requires an instance of QApplication.
大意为:
QFileSystemModel类为本地文件系统提供了一个数据模型。
这个类提供对本地文件系统的访问,提供重命名和删除文件和目录以及创建新目录的功能。在最简单的情况下,它可以与适当的显示小部件一起作为浏览器或过滤器的一部分使用。
可以使用QAbstractItemModel提供的标准接口访问QFileSystemModel,但是它也提供了一些特定于目录模型的方便函数。fileInfo()、isDir()、fileName()和filePath()函数提供关于与模型中的项相关的底层文件和目录的信息。可以使用mkdir()、rmdir()创建和删除目录。
注意:QFileSystemModel需要QApplication的一个实例
调用该的类的方式为:
model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
ui->tableView->setModel(model);
上面的setRootPath
并不会让 tableVew
显示 QDir::currentPath()
目录。想要显示当前目录,可以使用:
ui->tableView->setRootIndex(model->index(QDir::currentPath()));
上面显示的表格窗口一共有四行,分别为:Name 、Size、Type还有“Date Modified”。表头定义是在Qt源码的:qtbase/src/widgets/dialogs/qfilesystemmodel.cpp 文件中QFileSystemModel::headerData函数中实现。
所以,想要修改表头内容,可以重写该函数。下面是具体例子。
mainwindow.h 文件内容为:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QFileSystemModel> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MyFileSystemModel : public QFileSystemModel { QVariant headerData(int section, Qt::Orientation orientation, int role) const override; }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); MyFileSystemModel *model; private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); model = new MyFileSystemModel; model->setRootPath(QDir::currentPath()); ui->tableView->setModel(model); ui->tableView->setRootIndex(model->index(QDir::currentPath())); } MainWindow::~MainWindow() { delete ui; } /*! \reimp */ QVariant MyFileSystemModel::headerData(int section, Qt::Orientation orientation, int role) const { switch (role) { case Qt::DecorationRole: if (section == 0) { // ### TODO oh man this is ugly and doesn't even work all the way! // it is still 2 pixels off QImage pixmap(16, 1, QImage::Format_Mono); pixmap.fill(0); pixmap.setAlphaChannel(pixmap.createAlphaMask()); return pixmap; } break; case Qt::TextAlignmentRole: return Qt::AlignLeft; } if (orientation != Qt::Horizontal || role != Qt::DisplayRole) return QAbstractItemModel::headerData(section, orientation, role); QString returnValue; switch (section) { case 0: returnValue = tr("Name"); break; case 1: returnValue = tr("Size"); break; case 2: returnValue = #ifdef Q_OS_MAC tr("Kind", "Match OS X Finder"); #else tr("Type", "All other platforms"); #endif break; // Windows - Type // OS X - Kind // Konqueror - File Type // Nautilus - Type case 3: returnValue = tr("adams_path"); break; default: return QVariant(); } return returnValue; }
这样就实现了修改表头的功能。
上面仅仅实现了修改表头内容,下面的数据,依然是修改日期。
想要修改下面的数据,需要重写QFileSystemModel::data
函数,但是该函数中调用了私有成员,不能直接修改重写。
所以还是需要,一行一行的手动修改数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。