数据是一个集合,显示也是一个集合。例如一篇《西游记》的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现。

下面是将一个二维数组中的数据显示到TableView控件中。

1.声明一个model类,继承于QAbstractTableModel

#define ROW 3
#define COL 2

class TableModel : public QAbstractTableModel
{
Q_OBJECT
public:
TableModel(QObject *parent = 0);
~TableModel();
//QAbstractTableModel 中3个必须重新实现的虚函数
int rowCount(const QModelIndex & parent = QModelIndex()) const;
int columnCount(const QModelIndex & parent = QModelIndex()) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;

private:
int num[ROW][COL];
int nn;
};
2.方法实现

TableModel::TableModel(QObject *parent) :QAbstractTableModel(parent)
{
//二维数初始化,从100开始
nn = 100;
for(int i=0;i<ROW;++i){
for(int j=0;j<COL;++j){
num[i][j] = nn;
++nn;
}
}
}

TableModel::~TableModel()
{
}

//体现model的行数,这里有3行
int TableModel::rowCount(const QModelIndex & parent) const
{
return ROW;
}

//体现model的列数,这里有2列
int TableModel::columnCount(const QModelIndex & parent) const
{
return COL;
}

//体现model中显示的数据,这里只是num中每一个成员值。
QVariant TableModel::data(const QModelIndex & index, int role) const
{
if (Qt::DisplayRole == role)
{
return num[index.row()][index.column()];//返回num二维数组中的值
}
return QVariant::Invalid;
}
3.将model与QTableView关联起来。

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->resize(300,200);

TableModel *model = new TableModel();

QTableView *tableview = new QTableView(this);

tableview->setModel(model);

tableview->setGeometry(5,5,280,180);
}
4.显示效果,3行2列

目前的实现都是从定义好的model中取出数据,放在不同的显示控件中,相当于只读,没有对数据部分做任何修改。下一节将以此篇为基础,介绍如何对数据部分进行操作。
---------------------
作者:涛水
来源:CSDN
原文:https://blog.csdn.net/lutao614/article/details/80863790
版权声明:本文为博主原创文章,转载请附上博文链接!

模型/视图将数据和显示分开进行处理,中间通过代理做桥梁。

如果想往QCombox中添加一些子项,你会怎么做呢?除了常用的addItem方法,下面介绍通过模型/视图的方式添加,逐步理解模型/视图的使用方法。

1.首先添加一个类,继承自QAbstractListModel

class ComboxModel : public QAbstractListModel
{
Q_OBJECT
public:
ComboxModel(QStringList &_list,QObject *parent = 0);
~ComboxModel();
//QAbstractListModel 中3个必须重新实现的虚函数
int rowCount(const QModelIndex & parent = QModelIndex()) const;
int columnCount(const QModelIndex & parent = QModelIndex()) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;

private:
QStringList list;

};
2.方法实现

//将QStringList中的字符串显示在combox中。
ComboxModel::ComboxModel(QStringList &_list,QObject *parent) :list(_list),QAbstractListModel(parent)
{
}

ComboxModel::~ComboxModel()
{
}

//体现model的行数,这里就是list的个数
int ComboxModel::rowCount(const QModelIndex & parent) const
{
return list.count();
}

//体现model的列数,这里只有1列
int ComboxModel::columnCount(const QModelIndex & parent) const
{
return 1;
}

//体现model中显示的数据,这里只是list中每一个子项。
QVariant ComboxModel::data(const QModelIndex & index, int role) const
{
if (Qt::DisplayRole == role)
{
return list.at(index.row());//返回list每一项
}
return QVariant::Invalid;
}
3.界面上的combox与model进行关联。

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->resize(200,200);

QComboBox *combox = new QComboBox(this);
combox->setGeometry(50,50,100,40);

QStringList list;
list<<"123"<<"345"<<"546"<<"apple";
//创建model并初始化它。
ComboxModel *model = new ComboxModel(list);

combox->setModel(model);
}
4.最后效果

---------------------
作者:涛水
来源:CSDN
原文:https://blog.csdn.net/lutao614/article/details/80859968
版权声明:本文为博主原创文章,转载请附上博文链接!

Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good的更多相关文章

  1. php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行)

    php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行) 一.总结 1.多复制上面写的代码,有利于检查错误 2.一层循环就解决了,前后两个指针,和大了 ...

  2. 如果你的eclipse在每次run或debug时都莫名其妙的做一件事

    新项目,使用Ant打war包.结果写完了Ant以后,包是打好了,却使eclipse以后每次run或debug时都莫名其妙地自动先执行这个Ant, 让人十分苦恼. 其实,是你的eclipse设置出了问题 ...

  3. 这五件事,二次SaaS创业的老炮儿都在做(转)

    在我看来,我们现在正处在SaaS公司发展过程中的第三代.第一代SaaS公司有Salesforce.Netsuite和Webex等.紧接着兴起的第二代SaaS公司大多都是利用Salesforce或其他网 ...

  4. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  5. SpringCloud的入门学习之概念理解、Eureka服务注册与发现入门

    1.微服务与微服务架构.微服务概念如下所示: 答:微服务强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题.提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面的一个个微服务 ...

  6. 《Activity显示界面历险记》—说说View的那些理不清的关系

    前言 在Activity显示View的过程中,有一些重要的角色总让人理不清,比如PhoneWindow.DecorView.ViewRootImpl. 也常常有面试题会问到,他们四者之间的关系?创建的 ...

  7. 和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧。因为,很多PCI的例子都是对S5933,就连微软出版的《Programming the Microsoft Windows Driver Model》都提供了一个完整的S5933的例子。 在这篇有关DDK的开发论文里。

    和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧.因为,很多PCI的例子都是对S5933,就连微软出版的<Programming the Microsoft Wi ...

  8. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  9. ViewModel在MVC3中的应用:一个view显示多个model

    在mvc3中,默认是一张数据表对应一个model,一个视图 view只显示一个model. 但是有些时候,我们一个视图上可能需要显示多个model的内容,即一个网页可能要展示多张表的信息,那怎么办呢, ...

随机推荐

  1. 递推,求至少连续放置三个U的危险组合

    UVA580-Critical Mass 题意 有两种方块,L和U,有至少三个连续的U称为危险组合,问有多少个危险组合 solution: 至少这个概念比较难求 ,所以转化为(1ll<<n ...

  2. 以下示例使用一个 x,y 坐标列表创建了一个多边形几何对象。然后使用裁剪工具来裁剪具有多边形几何对象的要素类。

    import arcpy # Create an Array object. # array = arcpy.Array() # List of coordinates. # coordList = ...

  3. RunHelper,一个为跑步而设计的开源的android app

    RunHelper是一个为跑步而设计的android应用,意在为爱跑步的人提供一个简洁.实用.免费的工具. 我自己也经常跑步,也用过像Nike running.runkeeper之类的app:Nike ...

  4. UTC ISO 8601

    如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z.Z是相对协调世界时时间0偏移的代号.如下午2点30分5秒表示为14:30:05Z或143005Z:只表示小时和分 ...

  5. 宝塔安装Nextcloud,挂载在阿里云oss上,打造个人/企业高效私有云盘

    如下未完整整理,看懂看不懂随缘.... 准备条件: 1.阿里云oss 2.阿里云ecs 3.环境:centos7.x 步骤: 1.centos中安装宝塔面板 2.下载NextCloud安装包,上传到宝 ...

  6. 服务器开启FTP功能

    介绍几个比较完整的教程链接 Windows Server 2012 之文件服务器(FTP)

  7. Myeclipse 启动tomcat项目报Out of memory: java heap space

    问题: 在Myeclipse中启动tomcat,程序启动过程中报内存不足,java.lang.OutOfMemoryError: Java heap space 从错误可以看出是堆内存太小,需要配置j ...

  8. java代码实现简体繁体转换

    汉字分为简体和繁体字,这是众所周知的,虽然繁体字中国大陆这边用的并不会太多,但时不时的还是会使用到.那么,如何做到简体字和繁体字的转换呢?其实很简单,这里附上一个java版本的简繁体转换,用网上找的接 ...

  9. Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_汇总贴

    51CTO学院 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) H:\BaiDu\微服务0830\2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) ...

  10. composer install与composer update的区别

    1.composer install install 命令从当前目录读取 composer.json 文件,处理了依赖关系,并把其安装到 vendor 目录下. php composer.phar i ...