QT第十天

QFileSystemModel

使用QFileSystemModel作为数据模型,QTreeView,QListView和QTableView为主要组件
在TreeView中一目录书的形式显示本机的文件系统
单机一个目录是,右边的LIstView和TableView显示该目录下的目录和文件
在TreeView上单击一个目录或文件节点是,下方的几个标签显示当前节点的信息

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QMainWindow>
#include <QFileSystemModel>
namespace Ui {
class MainWindow;
}


class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();


private slots:
    void on_treeView_clicked(const QModelIndex &index);


private:
    Ui::MainWindow *ui;
    QFileSystemModel    *model; //定义数据模型变量
};


#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 QFileSystemModel(this); //QFileSystemModel提供单独线程,推荐使用
model->setRootPath(QDir::currentPath()); //设置根目录


ui->treeView->setModel(model); //设置数据模型
ui->listView->setModel(model); //设置数据模型
ui->tableView->setModel(model); //设置数据模型

//信号与槽关联,treeView单击时,其目录设置为listView和tableView的根节点
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
ui->listView,SLOT(setRootIndex(QModelIndex)));

connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
        ui->tableView,SLOT(setRootIndex(QModelIndex)));

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
ui->chkIsDir->setChecked(model->isDir(index));//判断一个节点是不是一个目录
ui->LabPath->setText(model->filePath(index));//返回节点是不是目录名或路径名
ui->LabType->setText(model->type(index));//返回描述节点类型的文字,如"Drive",File Folder"
ui->LabFileName->setText(model->fileName(index)); //fileName返回去除路径的文件夹名或文件名

int sz=model->size(index)/1024;//siz节点如果是文件返回文件大小字节数,如果是文件夹返回0
if (sz<1024)
    ui->LabFileSize->setText(QString("%1 KB").arg(sz));
else
    ui->LabFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));

}

mainwindow.ui

在这里插入图片描述

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/theRookie1/article/details/84846714