一.模型和视图的概念
1.关系
模型管理着数据,数据支撑着模型,视图展示着模型。
2.模型
模型是一个类,已经为对应数据写好操作的类,不同的数据对应着不同的模型,模型以行来管理着数据。
3.数据
数据可以分为:数据库数据,内存数据,磁盘数据。
4.视图
View相当于模型的界面,用来展示模型。
Widget相当于模型与视图结合在一起了。
5.特点
通过模型与视图的框架,使数据分类,大大的提高了灵活性,响应性,可以更好的处理复杂的数据。
二.文件系统模型
目标效果:
1.那种数据?
文件系统模型管理着磁盘数据
2.界面拖放
界面的拖放,我就不讲了,不会的可以问我。
3.创建模型
在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: Ui::MainWindow *ui; QFileSystemModel*model;//定义文件系统模型数据成员 }; #endif // MAINWINDOW_H
在mainwindow.cpp中
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); model=new QFileSystemModel;//创建模型 } MainWindow::~MainWindow() { delete ui; }
4.模型设置数据
model->setRootPath(QDir::currentPath());
通过F1在线文档查看,就是相当于是文件目录中设置一个监视器,目录文件数据的一举一动都能被检测到。
5.视图设置模型
一个模型可以对应多个视图
ui->treeView->setModel(model); ui->listView->setModel(model); ui->tableView->setModel(model);
设置好视图,我们就可以看到界面了
6.模型索引
这个信号的参数就是一个模型索引,在视图中,我们可以通过模型索引来对模型进行操作。
比如说我们希望ListView和TableView跟随TreeView的变化而变化。
void MainWindow::on_treeView_clicked(const QModelIndex &index) { ui->listView->setRootIndex(index); ui->tableView->setRootIndex(index); }
运行结果:
【qt】初识模型和视图2:https://developer.aliyun.com/article/1523114