一、基础知识

1、MVC设计模式:是一种与用户界面相关的设计模式,通过此模式,可以有效的分离数据和用户界面。

MVC包括三个要素:

  • 表示数据的模型(Model):应用程序的对象
  • 表示用户界面的视图(View):屏幕演示
  • 定义用户在界面上操作的控制器(Controller):定义了用户界面相应用户输入的方式

2、Qt的InterView框架:

与MVC模式类似,将MVC的视图和控制器部件结合在一起,又引入了代理,通过代理,能够自定义数据条目的显示和编辑方式。

  • 模型(Model):通知视图关于改变由数据源保持的数据
  • 视图(View):提供了关于用户交互显示的项目信息
  • 代理(Delegate):当编辑时告诉模型和视图的编辑状态

模型与数据源进行通信,在这个体系结构中为其它组件提供了一个接口。

视图从模型中得到模型索引,这些都引用到数据项。通过为模型提供模型索引,视图可以从数据源中检索数据项。

二、应用举例

实现自定义模型:

自定义模型:通过实现将数值代码转换为文字模型

1、新建mainwindow窗口,不带设计界面,新建modelex类

2、modelex.h文件设计如下

#ifndef MODELEX_H
#define MODELEX_H#include <QAbstractTableModel>
#include <QVector>
#include <QMap>
#include <QStringList>
class ModelEx : public QAbstractTableModel
{
public:explicit ModelEx(QObject *parent=0);//虚函数声明                                     //(a)virtual int rowCount(const QModelIndex &parent=QModelIndex()) const;virtual int columnCount(const QModelIndex &parent=QModelIndex()) const;QVariant data(const QModelIndex &index, int role) const;QVariant headerData(int section, Qt::Orientation orientation, int role) const;
signals:public slots:
private:QVector<short> army;QVector<short> weaponType;QMap<short,QString> armyMap;    //使用QMap数据结构保存“数值—文字”的映射QMap<short,QString> weaponTypeMap;QStringList  weapon;QStringList  header;void populateModel();           //完成表格数据的初始化填充
};#endif // MODELEX_H

3、mian.cpp文件设计如下

#include "mainwindow.h"
#include <QApplication>
#include "modelex.h"
#include <QTableView>
int main(int argc, char *argv[])
{QApplication a(argc, argv);ModelEx modelEx;//实例化自定义类QTableView view;view.setModel(&modelEx);//设置视图对象模型view.setWindowTitle(QObject::tr("modelEx"));//设置窗口名称view.resize(400,400);view.show();//MainWindow w;//w.show();return a.exec();
}

4、设计modelex.cpp文件

(1)构造函数

#include "modelex.h"ModelEx::ModelEx(QObject *parent):QAbstractTableModel(parent)
{armyMap[1]=tr("空军");armyMap[2]=tr("海军");armyMap[3]=tr("陆军");armyMap[4]=tr("海军陆战队");weaponTypeMap[1]=tr("轰炸机");weaponTypeMap[2]=tr("战斗机");weaponTypeMap[3]=tr("航空母舰");weaponTypeMap[4]=tr("驱逐舰");weaponTypeMap[5]=tr("直升机");weaponTypeMap[6]=tr("坦克");weaponTypeMap[7]=tr("两栖攻击舰");weaponTypeMap[8]=tr("两栖战车");populateModel();//设置默认显示内容
}

(2)其他函数

//设置默认显示内容
void ModelEx::populateModel()
{header<<tr("军种")<<tr("种类")<<tr("武器");army<<1<<2<<3<<4<<2<<4<<3<<1;weaponType<<1<<3<<5<<7<<4<<8<<6<<2;weapon<<tr("B-2")<<tr("尼米兹级")<<tr("阿帕奇")<<tr("黄蜂级")<<tr("阿利伯克级")<<tr("AAAV")<<tr("M1A1")<<tr("F-22");
}
//设置列数
int ModelEx::columnCount(const QModelIndex &parent) const
{    return 3;     }
//设置行数
int ModelEx::rowCount(const QModelIndex &parent) const
{return army.size();
}
QVariant ModelEx::data(const QModelIndex &index, int role) const
{if(!index.isValid())return QVariant();if(role==Qt::DisplayRole)//(a)DisplayRole用来存取视图中显示的文字{switch(index.column()){case 0:return armyMap[army[index.row()]];break;case 1:return weaponTypeMap[weaponType[index.row()]];break;case 2:return weapon[index.row()];default:return QVariant();}}return QVariant();
}
//返回固定的表头数据,设置水平表头的标题
QVariant ModelEx::headerData(int section, Qt::Orientation orientation, int role) const
{if(role==Qt::DisplayRole&&orientation==Qt::Horizontal)return header[section];return QAbstractTableModel::headerData(section,orientation,role);
}

5、显示效果

QT学习笔记14(Qt模型视图结构)相关推荐

  1. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  2. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  3. Qt 学习之路:模型-视图高级技术

      PathView PathView是 QtQuick 中最强大的视图,同时也是最复杂的.PathView允许创建一种更灵活的视图.在这种视图中,数据项并不是方方正正,而是可以沿着任意路径布局.沿着 ...

  4. Qt学习笔记(Qt制作菜单栏and工具栏and状态栏)^_^

    本人是菜鸟,这里记录的每天的学习内容 学习Qt 的第四天(笑着学) 学习内容: 1)编写一个菜单栏 and 工具栏 and 状态栏                                    ...

  5. Qt学习笔记之Qt软件的打包发布

    在QT编程结束之后,我们会运行程序,这个过程结束后会在你工程的父目录中出现一个build-simpleEditor-unknown-Debug的文件夹,其中build之后的名称就是你工程的名称.在这个 ...

  6. Qt学习笔记之--Qt内置图标一览表

    Qt内置了一批图标,一共有70个(Qt 5.9.5),不同的平台图标有差异.由于官方文档中只有描述没有图示,所以写个Demo把这些图标全部显示出来.下面展示了windows.Linux.android ...

  7. 安卓学习笔记14:列表视图

    文章目录 1.创建安卓应用[ReadAncientPoetry] 2.将背景图片拷贝到drawable目录 3.布局资源文件activity_main.xml 4.诗歌列表项模板poem_list_i ...

  8. QT学习笔记(1): Qt的线程安全和可重用性

    原来觉得对线程安全是比较了解的,可是今天看了Nokia Developer中的Reentrancy and Thread-safty之后,发现还有有些概念没有很清楚.所以在此留点痕迹好了. 首先两个英 ...

  9. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

最新文章

  1. 半平面交比较好的博客
  2. 1008c语言答案,c语言大作业题目01008.doc
  3. jodd-StringTemplateParser使用
  4. msyql show命令(转)
  5. ABAP where used list
  6. 动态规划:从新手到专家
  7. oracle 不包含某个单词,SQL SELECT WHERE字段包含单词
  8. stm32烧录软件_使用华为LiteOS Studio开发STM32物联网工程1
  9. [机器学习-Sklearn]K-means(K均值)学习与总结
  10. AD 文档信息设置和制作模板
  11. github操作实用命令
  12. 蓝宝石会升级bios吗_浴火重生 蓝宝石HD7950 Flex测BIOS提速
  13. 消防信号二总线有没电压_消防主机总线电压偏低 消防二总线详解
  14. html ur是什么意思_url是什么意思?
  15. c语言解除键盘锁定,笔记本键盘怎么解除锁定
  16. Hello, World——从零到实盘0
  17. 企业人才测评结果的三种导向分析
  18. traceroute命令详解
  19. 如何使用Apple Watch解锁iPhone和Mac?
  20. 一个离职员工对中兴的回望

热门文章

  1. Genymotion强大好用高性能的Android模拟器(在电脑流畅运行APK安卓软件游戏的利器)
  2. C语言中,1~n的阶乘
  3. 自然人投资控股与非自然人投资控股
  4. 光模块正确安装步骤及注意事项【图文】
  5. 沃特世推出全新Arc HPLC高效液相色谱,助力实验室达成质量和生产目标
  6. 初中学历的 00 后程序员,未来怎么办?
  7. 服装店收银系统如何管理店铺支出?
  8. 破解你的选择困难症——综合评价分析法
  9. DIY温湿度检测仪(带音乐的噢)
  10. 无法启动游戏 计算机丢失,win7系统无法启动游戏提示缺少vcomp100.dll文件怎么办...