Qt中Model使用

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44585751

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值