Qt中Model使用

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_model = new QFileSystemModel(this);
    ui->tableView->setModel(m_model);
    ui->listView->setModel(m_model);
    ui->treeView->setModel(m_model);

   // ui->treeView->setRootIndex(m_model->index(QDir::currentPath()));

    m_model->setRootPath("");

    connect(ui->treeView,&QTreeView::clicked,ui->tableView,&QTableView::setRootIndex);//QTreeView按下后,根项目显示在QTableView中
    connect(ui->treeView,&QTreeView::clicked,ui->listView,&QListView::setRootIndex);
}

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

//在TableView和ListView中显示文件、目录,在TreeView中显示文件列表
void MainWindow::on_setAction_triggered()
{
    QString dir = QFileDialog::getExistingDirectory(this,"获取路径",QDir::currentPath());
    if(dir.isEmpty()){
        return;
    }

    ui->treeView->setRootIndex(m_model->index(dir));
    ui->tableView->setRootIndex(m_model->index(dir));
    ui->listView->setRootIndex(m_model->index(dir));
}

//显示目录、文件,不包含特殊文件.和..
void MainWindow::on_radioButtonShowFileAndFloder_clicked()
{
    ui->groupBoxFileSelect->setEnabled(true);
    m_model->setFilter(QDir::AllDirs|QDir::Files|QDir::NoDotAndDotDot);
}

//只显示目录
void MainWindow::on_radioButtonShowFloder_clicked()
{
    ui->groupBoxFileSelect->setEnabled(false);
    m_model->setFilter(QDir::AllDirs|QDir::NoDotAndDotDot);
}

void MainWindow::on_checkBox_clicked(bool checked)
{
    ui->comboBox->setEnabled(checked);
    ui->pushButtonApplicat->setEnabled(checked);
    m_model->setNameFilterDisables(!checked);
}

//显示指定格式的文件
void MainWindow::on_pushButtonApplicat_clicked()
{
    QStringList strList = ui->comboBox->currentText().trimmed().split(";",QString::SkipEmptyParts);
   // QStringList list = ui->comboBox->currentText().split(";");
    m_model->setNameFilters(strList);
}

//显示当前项的类型、大小、路径、是否为目录、节点类型
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    ui->labelFileName->setText(m_model->fileName(index)); //文件名
    ui->labelFloderName->setText(m_model->filePath(index));//目录名
    ui->labelNodeType->setText(m_model->type(index));//节点类型

    if(m_model->isDir(index)){//是否为目录
        ui->checkBoxIsFloder->setCheckState(Qt::Checked);
    }else {
        ui->checkBoxIsFloder->setCheckState(Qt::Unchecked);
    }

    int fileSize = m_model->size(index);//文件大小
    if(fileSize > 1024)
        ui->labelFileSize->setText(QString("%.1f MB").arg(fileSize /1024.0));
    else {
        ui->labelFileSize->setText(QString("%1 KB").arg(fileSize));
    }
}

你可能感兴趣的:(qt)