QFileSystemModel绑定到 QTreeView、 QListView、QTableView,实现文件的查看
.h文件
#ifndef FILESYSEXAMPLE_H
#define FILESYSEXAMPLE_H
#include <QMainWindow>
#include <QFileSystemModel>
namespace Ui {
class FileSysExample;
}
class FileSysExample : public QMainWindow
{
Q_OBJECT
private:
QFileSystemModel *m_model;
public:
explicit FileSysExample(QWidget *parent = nullptr);
~FileSysExample();
private slots:
void on_treeView_clicked(const QModelIndex &index);
void on_actSetRoot_triggered();
void on_btnApplyFilter_clicked();
void on_chkBoxEnableFilter_clicked(bool checked);
void on_radioShowAll_clicked();
void on_radioShowOnlyDir_clicked();
private:
Ui::FileSysExample *ui;
};
#endif // FILESYSEXAMPLE_H
.cpp文件
#include "filesysexample.h"
#include "ui_filesysexample.h"
#include <QFileDialog>
FileSysExample::FileSysExample(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::FileSysExample)
{
ui->setupUi(this);
//在ui文件中设置 splitterMain的垂直和水平扩展为 Expanding
m_model= new QFileSystemModel(this);
m_model->setRootPath(QDir::currentPath());//设置m_model的根目录
//树视图、列表视图、表格视图组件的 数据模型全部设置为m_model
ui->treeView->setModel(m_model);
ui->listView->setModel(m_model);
ui->tableView->setModel(m_model);
//点击树视图触发 listView tableView 的设置根节点事件
connect(ui->treeView,SIGNAL(clicked(QModelIndex))
,ui->listView,SLOT(setRootIndex(QModelIndex)));
connect(ui->treeView,SIGNAL(clicked(QModelIndex))
,ui->tableView,SLOT(setRootIndex(QModelIndex)));
}
FileSysExample::~FileSysExample()
{
delete ui;
}
void FileSysExample::on_treeView_clicked(const QModelIndex &index)
{
ui->chkIsDir->setChecked(m_model->isDir(index));
ui->labPath->setText(m_model->filePath(index));
ui->labType->setText(m_model->type(index));
ui->labFileNanme->setText(m_model->fileName(index));
int sz = m_model->size(index)/1024;//kb
if(sz<1024)
ui->labFileSize->setText(QString("%1 KB").arg(sz));//如果小于1024KB,呈现KB单位
else
ui->labFileSize->setText(QString("%1f MB")
.arg(sz/1024.0));
//如果大于1024KB 以MB单位呈现,且以浮点数表示
}
void FileSysExample::on_actSetRoot_triggered()
{
QString dir = QFileDialog::getExistingDirectory(this
,"选择目录"
,QDir::currentPath());
if(!dir.isEmpty())
{
m_model->setRootPath(dir);
//tableView的根index和model初始化对齐
ui->tableView->setRootIndex(m_model->index(dir));
}
}
void FileSysExample::on_btnApplyFilter_clicked()
{
QString filterStr= ui->comboFilter->currentText().trimmed();
//以分号为间隔,获取到过滤类型的列表,忽略空字符串
QStringList filterList = filterStr.split(";",Qt::SkipEmptyParts);
m_model->setNameFilters(filterList);
}
void FileSysExample::on_chkBoxEnableFilter_clicked(bool checked)
{
m_model->setNameFilterDisables(!checked);
ui->comboFilter->setEnabled(checked);
ui->btnApplyFilter->setEnabled(checked);
}
void FileSysExample::on_radioShowAll_clicked()
{
ui->groupBoxFilter->setEnabled(true);
m_model->setFilter(QDir::AllDirs
|QDir::Files
|QDir::NoDotAndDotDot);
}
void FileSysExample::on_radioShowOnlyDir_clicked()
{
ui->groupBoxFilter->setEnabled(false);
m_model->setFilter(QDir::AllDirs
|QDir::NoDotAndDotDot);
}
结果
总结
QFileSystemModel绑定到 QTreeView、QTableView 上自动呈现列名
Name、Size、Type等