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));
}