QFileSystemModel

最近在阅读Qt 5.9 C++开发指南,为了加深对书本上内容的理解,参照书上的讲解尝试写了一些demo,用于以后工作中查阅,如果涉及侵权请告知实例程序samp5_1

 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QCheckBox>
#include <QLabel>
#include <QFileSystemModel>

class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    QTreeView *_treeView;
    QTableView *_tableView;
    QListView *_listView;
    QLabel *_labelFileName;
    QLabel *_labelFileSize;
    QLabel *_labelType;
    QLabel *_labelPath;
    QCheckBox *_checkBoxIsDir;
    QFileSystemModel *_fileSystemModel;

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

public slots:
    void clickedTreeView(const QModelIndex &index);

};

#endif // MAINWINDOW_H

MainWindow.cpp

#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QSplitter>
#include <QDir>
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    iniUI();
    iniSignalSlots();

    _fileSystemModel = new QFileSystemModel(this);
    _fileSystemModel->setRootPath(QDir::currentPath());
    _treeView->setModel(_fileSystemModel);
    _listView->setModel(_fileSystemModel);
    _tableView->setModel(_fileSystemModel);
}

MainWindow::~MainWindow()
{

}

void MainWindow::iniUI()
{
    _treeView = new QTreeView(this);
    QHBoxLayout *layout1 = new QHBoxLayout();
    layout1->addWidget(_treeView);
    QGroupBox *groupBox1 = new QGroupBox("TreeView");
    groupBox1->setLayout(layout1);

    _listView = new QListView(this);
    QVBoxLayout *layout2 = new QVBoxLayout();
    layout2->addWidget(_listView);
    QGroupBox *groupBox2 = new QGroupBox("ListView");
    groupBox2->setLayout(layout2);

    QSplitter *splitter2 = new QSplitter();

    _tableView = new QTableView(this);
    QVBoxLayout *layout3 = new QVBoxLayout();
    layout3->addWidget(_tableView);
    QGroupBox *groupBox3 = new QGroupBox("TableView");
    groupBox3->setLayout(layout3);

    QVBoxLayout *layout4 = new QVBoxLayout();
    layout4->addWidget(groupBox2);
    layout4->addWidget(splitter2);
    layout4->addWidget(groupBox3);

    QHBoxLayout *layout5 = new QHBoxLayout();
    layout5->addWidget(groupBox1);
    layout5->addLayout(layout4);

    QSplitter *splitter3 = new QSplitter();

    _labelFileName = new QLabel();
    _labelFileSize = new QLabel();
    _labelType = new QLabel();
    _checkBoxIsDir = new QCheckBox("节点是目录");
    QHBoxLayout *layout6 = new QHBoxLayout();
    layout6->addWidget(_labelFileName);
    layout6->addWidget(_labelFileSize);
    layout6->addWidget(_labelType);
    layout6->addWidget(_checkBoxIsDir);

    _labelPath = new QLabel();
    QHBoxLayout *layout7 = new QHBoxLayout();
    layout7->addWidget(_labelPath);

    QVBoxLayout *layout8 = new QVBoxLayout();
    layout8->addLayout(layout6);
    layout8->addLayout(layout7);
    QGroupBox *groupBox4 = new QGroupBox();
    groupBox4->setLayout(layout8);

    QVBoxLayout *layout9 = new QVBoxLayout();
    layout9->addLayout(layout5);
    layout9->addWidget(splitter3);
    layout9->addWidget(groupBox4);

    QWidget *widget = new QWidget();
    widget->setLayout(layout9);

    setCentralWidget(widget);
    resize(800, 600);
}

void MainWindow::iniSignalSlots()
{
    connect(_treeView, SIGNAL(clicked(QModelIndex)), this, SLOT(clickedTreeView(QModelIndex)));
    connect(_treeView, SIGNAL(clicked(QModelIndex)), _listView, SLOT(setRootIndex(QModelIndex)));
    connect(_treeView, SIGNAL(clicked(QModelIndex)), _tableView, SLOT(setRootIndex(QModelIndex)));
}

void MainWindow::clickedTreeView(const QModelIndex &index)
{
    QString fileName = _fileSystemModel->fileName(index);
    _labelFileName->setText(fileName);

    qint64 fileSize = _fileSystemModel->size(index);
    _labelFileSize->setText(QString::number(fileSize));

    QString type = _fileSystemModel->type(index);
    _labelType->setText(type);

    bool isDir = _fileSystemModel->isDir(index);
    _checkBoxIsDir->setChecked(isDir);

    QString path = _fileSystemModel->filePath(index);
    _labelPath->setText(path);
}

main.cpp

#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

猜你喜欢

转载自www.cnblogs.com/samp000/p/12327956.html
今日推荐