fileModel= new QFileSystemModel(this);
fileModel->setRootPath(QDir::currentPath());
QFileSystemModel提供的接口函数可以创建目录、删除目录、重命名目录,可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息。
在使用QFileSystemModel获取文件名称、文件大小、文件类型以及文件路径时,出现一个错误导致程序不能运行。如下图的报错信息:
解决:就是全局定义的问题,不应该在局部函数里面定义全局的变量,然后局部使用。
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileSystemModel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QFileSystemModel *fileModel=NULL;//全局定义,设置为空。
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_treeView_clicked(const QModelIndex &index);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
fileModel= new QFileSystemModel(this);//key:QFileSystemModel提供的接口函数
fileModel->setRootPath(QDir::currentPath());//可以创建目录、删除目录、重命名目录,可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息
ui->treeView->setModel(fileModel);
ui->listView->setModel(fileModel);
ui->tableView->setModel(fileModel);
ui->tableView->verticalHeader()->setVisible(false);
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->labName->setText(fileModel->fileName(index));
//qDebug()<<__func__<<fileModel->fileName(index)<<index.row();
ui->labPath->setText(fileModel->filePath(index));//显示路径出错误????添加程序整个报错卡死
ui->labType->setText(fileModel->type(index));
unsigned sz=fileModel->size(index)/1024;
if(sz<1024)
ui->labSize->setText(QString::asprintf("%d KB",sz));
else
ui->labSize->setText(QString::asprintf("%->2f MB",(float)sz/1024));//设置输出小数点位数
ui->checkBox->setChecked(fileModel->isDir(index));
}