最近在阅读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(); }