QT5笔记: 19. QFileSystemModel 联动 QListView QTableView QTreeView

Model 指的是数据
View 指的是界面,View不用设置,只需要和Model进行绑定,绑定完成之后就是Model的格式了

例子:*本例子中QListView QTableView QTreeView没有做任何处理,只是拖放至ui文件,设置了布局
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

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_treeView_clicked(const QModelIndex &index);

private:
    Ui::MainWindow *ui;
    QFileSystemModel *model; //数据存放
};
#endif // MAINWINDOW_H

MainWindow.cpp

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    model = new QFileSystemModel(this);
    model->setRootPath("/home/xinkai/");//这句话不知道为啥不生效,还是在/这个文件夹
    ui->treeView->setModel(model); //model 和View做关联
    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)));
}

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

/**
 * @brief MainWindow::on_treeView_clicked 现实文件名
 * @param index
 */
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    QString fileName = model->fileName(model->index(model->filePath(index)));//通过文件路径获取文件名称
    qint64 size = model->size(index);
    QString type = model->type(index);
    bool isDir = model->isDir(index);
    QString filePath = model->filePath(index);

    ui->labelName->setText(fileName);
    ui->labelSize->setText(QString("%1B").arg(size));
    ui->labelType->setText(type);
    ui->statusbar->showMessage(filePath);
    ui->cBoxisDictionary->setChecked(isDir);
}

最终界面样式
image

posted @ 2023-03-16 10:42  echo_lovely  阅读(150)  评论(0编辑  收藏  举报