当前位置:   article > 正文

Qt的QFileSystemModel与QTreeView、QTableView、QListView的组合使用_qtableview qfilesystemmodel

qtableview qfilesystemmodel

1.相关描述

QFileSystemModel与QTreeView、QTableView、QListView的组合,当QTreeView点击发生改变,QTableView和QListView也会发生变化

2.相关界面 

3.相关代码

mainwindow.cpp

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QFileSystemModel>
  4. #include <QFileDialog>
  5. #include <QHeaderView>
  6. #include <QStandardItemModel>
  7. MainWindow::MainWindow(QWidget *parent)
  8. : QMainWindow(parent)
  9. , ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. m_model = new QFileSystemModel(this);
  13. ui->treeView->setModel(m_model);
  14. ui->listView->setModel(m_model);
  15. ui->tableView->setModel(m_model);
  16. m_model->setRootPath(QDir::currentPath());
  17. // 树形视图与列表视图的信息联动
  18. connect(ui->treeView, &QTreeView::clicked, ui->listView, &QListView::setRootIndex);
  19. // 树形视图与表格视图的信息联动
  20. connect(ui->treeView, &QTreeView::clicked, ui->tableView, &QTableView::setRootIndex);
  21. this->initHeader();
  22. }
  23. MainWindow::~MainWindow()
  24. {
  25. delete ui;
  26. }
  27. void MainWindow::initHeader()
  28. {
  29. QStringList heardList;//表头
  30. heardList << "名称" << "大小" << "文件类型" << "修改时间";
  31. QHeaderView *hearviewTable = new QHeaderView(Qt::Horizontal, this);
  32. QHeaderView *hearviewTree = new QHeaderView(Qt::Horizontal, this);
  33. QStandardItemModel* model = new QStandardItemModel(this);
  34. model->setHorizontalHeaderLabels(heardList);
  35. hearviewTable->setModel(model);
  36. hearviewTree->setModel(model);
  37. hearviewTable->setSectionResizeMode(QHeaderView::Stretch); //先自适应宽度
  38. hearviewTable->setSectionResizeMode(0, QHeaderView::ResizeToContents); //然后设置要根据内容使用宽度的列
  39. hearviewTree->setSectionResizeMode(QHeaderView::Stretch); //先自适应宽度
  40. hearviewTree->setSectionResizeMode(0, QHeaderView::ResizeToContents); //然后设置要根据内容使用宽度的列
  41. ui->tableView->setHorizontalHeader(hearviewTable);
  42. ui->treeView->setHeader(hearviewTree);
  43. }
  44. // 设置根目录
  45. void MainWindow::on_actionSetRootDir_triggered()
  46. {
  47. QString dir = QFileDialog::getExistingDirectory(this, "选择目录", QDir::currentPath());
  48. if(dir.isEmpty()){
  49. return;
  50. }
  51. ui->treeView->setRootIndex(m_model->index(dir));
  52. ui->listView->setRootIndex(m_model->index(dir));
  53. ui->tableView->setRootIndex(m_model->index(dir));
  54. }
  55. // 显示目录和文件
  56. void MainWindow::on_rBtnShowDirAndFile_clicked()
  57. {
  58. ui->groupBoxFilter->setEnabled(true);
  59. m_model->setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);
  60. }
  61. // 只显示目录
  62. void MainWindow::on_rBtnShowOnlyDir_clicked()
  63. {
  64. ui->groupBoxFilter->setEnabled(false);
  65. m_model->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
  66. }
  67. // 文件名过滤
  68. void MainWindow::on_chkFileFilter_clicked(bool checked)
  69. {
  70. ui->comboBox->setEnabled(checked);
  71. ui->btnApply->setEnabled(checked);
  72. m_model->setNameFilterDisables(!checked);
  73. }
  74. // 应用
  75. void MainWindow::on_btnApply_clicked()
  76. {
  77. QStringList filter = ui->comboBox->currentText().trimmed().split(";", Qt::SkipEmptyParts);
  78. m_model->setNameFilters(filter);
  79. }
  80. // 显示底部状态
  81. void MainWindow::on_treeView_clicked(const QModelIndex &index)
  82. {
  83. ui->labFileDir->setText(m_model->fileName(index));
  84. ui->labFilePath->setText(m_model->filePath(index));
  85. ui->labFileType->setText(m_model->type(index));
  86. ui->chkNodeDir->setEnabled(m_model->isDir(index));
  87. ui->chkNodeDir->setChecked(m_model->isDir(index));
  88. int sz = m_model->size(index)/1024;
  89. if(sz < 1024){
  90. ui->labFileSize->setText(QString("%1 Kb").arg(sz));
  91. } else {
  92. ui->labFileSize->setText(QString::asprintf("%.1f MB", sz/1024.0));
  93. }
  94. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/764711
推荐阅读
相关标签
  

闽ICP备14008679号