QT学习笔记14(Qt模型视图结构)
一、基础知识
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模型视图结构)相关推荐
- Qt学习笔记,Qt国际化
Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\ ...
- Qt学习笔记,Qt程序架构设计要旨
Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...
- Qt 学习之路:模型-视图高级技术
PathView PathView是 QtQuick 中最强大的视图,同时也是最复杂的.PathView允许创建一种更灵活的视图.在这种视图中,数据项并不是方方正正,而是可以沿着任意路径布局.沿着 ...
- Qt学习笔记(Qt制作菜单栏and工具栏and状态栏)^_^
本人是菜鸟,这里记录的每天的学习内容 学习Qt 的第四天(笑着学) 学习内容: 1)编写一个菜单栏 and 工具栏 and 状态栏 ...
- Qt学习笔记之Qt软件的打包发布
在QT编程结束之后,我们会运行程序,这个过程结束后会在你工程的父目录中出现一个build-simpleEditor-unknown-Debug的文件夹,其中build之后的名称就是你工程的名称.在这个 ...
- Qt学习笔记之--Qt内置图标一览表
Qt内置了一批图标,一共有70个(Qt 5.9.5),不同的平台图标有差异.由于官方文档中只有描述没有图示,所以写个Demo把这些图标全部显示出来.下面展示了windows.Linux.android ...
- 安卓学习笔记14:列表视图
文章目录 1.创建安卓应用[ReadAncientPoetry] 2.将背景图片拷贝到drawable目录 3.布局资源文件activity_main.xml 4.诗歌列表项模板poem_list_i ...
- QT学习笔记(1): Qt的线程安全和可重用性
原来觉得对线程安全是比较了解的,可是今天看了Nokia Developer中的Reentrancy and Thread-safty之后,发现还有有些概念没有很清楚.所以在此留点痕迹好了. 首先两个英 ...
- QT学习笔记(摘抄)
QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...
最新文章
- 半平面交比较好的博客
- 1008c语言答案,c语言大作业题目01008.doc
- jodd-StringTemplateParser使用
- msyql show命令(转)
- ABAP where used list
- 动态规划:从新手到专家
- oracle 不包含某个单词,SQL SELECT WHERE字段包含单词
- stm32烧录软件_使用华为LiteOS Studio开发STM32物联网工程1
- [机器学习-Sklearn]K-means(K均值)学习与总结
- AD 文档信息设置和制作模板
- github操作实用命令
- 蓝宝石会升级bios吗_浴火重生 蓝宝石HD7950 Flex测BIOS提速
- 消防信号二总线有没电压_消防主机总线电压偏低 消防二总线详解
- html ur是什么意思_url是什么意思?
- c语言解除键盘锁定,笔记本键盘怎么解除锁定
- Hello, World——从零到实盘0
- 企业人才测评结果的三种导向分析
- traceroute命令详解
- 如何使用Apple Watch解锁iPhone和Mac?
- 一个离职员工对中兴的回望
热门文章
- Genymotion强大好用高性能的Android模拟器(在电脑流畅运行APK安卓软件游戏的利器)
- C语言中,1~n的阶乘
- 自然人投资控股与非自然人投资控股
- 光模块正确安装步骤及注意事项【图文】
- 沃特世推出全新Arc HPLC高效液相色谱,助力实验室达成质量和生产目标
- 初中学历的 00 后程序员,未来怎么办?
- 服装店收银系统如何管理店铺支出?
- 破解你的选择困难症——综合评价分析法
- DIY温湿度检测仪(带音乐的噢)
- 无法启动游戏 计算机丢失,win7系统无法启动游戏提示缺少vcomp100.dll文件怎么办...