Qt:24---QFileSystemModel、QDirModel数据模型
原创
©著作权归作者所有:来自51CTO博客作者董哥的黑板报的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、QFileSystemModel类的基本功能
- QFileSystemModel提供了一个可用于访问本机文件系统的数据类型
- QFileSystemModel可以和视图组件QTreeView、QListView、QTableView结合使用,显示文件系统的信息
二、QFileSystemModel的一些函数
QModelIndex QFileSystemModel::setRootPath(const QString &newPath);
bool QFileSystemModel::isDir(const QModelIndex &index) const;
QString QFileSystemModel::filePath(const QModelIndex &index) const;
QString QFileSystemModel::type(const QModelIndex &index) const;
QString QFileSystemModel::fileName(const QModelIndex &index) const;
qint64 QFileSystemModel::size(const QModelIndex &index) const;
三、QDirModel类
- 用于获取磁盘文件目录的数据模型还有一个QDirModel,其功能与QFileSystemModel类似,但是QFileSystemModel采用单独的线程获取目录文件结构。而QDirModel不使用单独的线程
- 使用单独的线程就不会阻塞主线程,所以推荐使用QFileSystemModel
四、演示案例
- 当点击treeView的某一项时,在ListView和TableView还有下面的groupBox中显示节点信息
代码:
- 在类中定义一个QFileSystemModel对象
model=new QFileSystemModel(this);
model->setRootPath(QDir::currentPath());
ui->treeView->setModel(model);
ui->listView->setModel(model);
ui->tableView->setModel(model);
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),ui->listView,SLOT(setRootIndex(QModelIndex)));
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),ui->tableView,SLOT(setRootIndex(QModelIndex)));
- 设置treeView的on_treeView_clicked(const QModelIndex &index)信号函数
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));
ui->LabFileName->setText(model->fileName(index));
int sz=model->size(index)/1024;
if(sz<1024)
ui->LabFileSize->setText(QString("%1 KB").arg(sz));
else
ui->LabFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));
}