1. 程式人生 > >QT第十天

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

在這裡插入圖片描述

執行結果

在這裡插入圖片描述