目录

一、前言

二、效果展示

三、源码解析

四、Demo/相关包


一、前言

本例主要讲解QAbstractTableModel用来制作表格的方法。

如果想在表格中添加控件,请查看我的博客《QItemDelegate表格添加控件简单解析》

二、效果展示

三、源码解析

CModel.h

#ifndef CMODEL_H
#define CMODEL_H#include <QAbstractTableModel>
#include <QStringList>
#include <QVector>class CModel : public QAbstractTableModel
{Q_OBJECT
public:explicit CModel();~CModel();//行数virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;//列数virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;//显示的数据virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;//从表格界面修改数据virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);//显示行首virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;//设置表格可选性等virtual Qt::ItemFlags flags(const QModelIndex &index) const;private://行首值QStringList                 m_horHeard;//表格数据QVector<QStringList>        m_vecData;
};#endif // CMODEL_H

CModel.cpp

#include "CModel.h"
#include <QCoreApplication>
#include <QDebug>
#include <QTextCodec>CModel::CModel()
{//设置行首值m_horHeard << tr("Name")<< tr("Class")<< tr("Grade");//设置虚拟数据值QStringList strlist1;strlist1 << "Xiao Ming"<< "Class A"<< "96";QStringList strlist2;strlist2 << "Xiao Fang"<< "Class A"<< "97";QStringList strlist3;strlist3 << "Xiao Liu"<< "Class B"<< "98";QStringList strlist4;strlist4 << "Xiao Yao"<< "Class B"<< "99";m_vecData.push_back(strlist1);m_vecData.push_back(strlist2);m_vecData.push_back(strlist3);m_vecData.push_back(strlist4);
}CModel::~CModel()
{
}int CModel::rowCount(const QModelIndex &parent) const
{return m_vecData.count();
}int CModel::columnCount(const QModelIndex &parent) const
{return m_horHeard.count();
}QVariant CModel::data(const QModelIndex &index, int role) const
{if (!index.isValid()){return QVariant();}if (role == Qt::DisplayRole || role == Qt::EditRole){//行int iRow = index.row();//列int iColumn = index.column();switch (iColumn){case 0:return m_vecData.at(iRow).at(iColumn);break;case 1:return m_vecData.at(iRow).at(iColumn);break;case 2:return m_vecData.at(iRow).at(iColumn);break;default:break;}}else if (role == Qt::TextAlignmentRole){return Qt::AlignCenter;}return QVariant();
}//这里界面修改, 数据变动的地方
bool CModel::setData(const QModelIndex &index, const QVariant &value, int role)
{if (!index.isValid())return false;if (role == Qt::DisplayRole ||role == Qt::EditRole){int iRow = index.row();int iColumn = index.column();QStringList strList = m_vecData.at(iRow);switch (iColumn){case 0:strList.replace(iColumn, value.toString());m_vecData.replace(iRow, strList);break;case 1:strList.replace(iColumn, value.toString());m_vecData.replace(iRow, strList);break;case 2:strList.replace(iColumn, value.toString());m_vecData.replace(iRow, strList);break;default:break;}//reset函数可以立即刷新表格数据reset();return true;}return false;
}QVariant CModel::headerData(int section, Qt::Orientation orientation, int role) const
{if (orientation == Qt::Horizontal && role == Qt::DisplayRole){return m_horHeard.at(section);}return QVariant();
}Qt::ItemFlags CModel::flags(const QModelIndex &index) const
{Qt::ItemFlags flag = QAbstractTableModel::flags(index);if (index.column() >= 0){flag |= Qt::ItemIsEditable;}return flag;
}

四、Demo/相关包

另附Demo供大家参考(百度云盘):

链接: https://pan.baidu.com/s/1vgD-n26UnOU-FcxwCOYNeg 提取码: 7sv5

QAbstractTableModel表格制作简单解析相关推荐

  1. 使用matlab建立个人简历,HTML 使用表格制作简单的个人简历

    复习一下HTML,用表格做一个简单的个人简历 .btbg{ text-align:center; } 个人简历 姓名 性别 出生日期 照片 民族 政治面貌 婚姻状况 现所在地 籍贯 学历 毕业学校 专 ...

  2. HTML 使用表格制作简单的个人简历

    复习一下HTML,用表格做一个简单的个人简历 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  3. ListView制作简单表格

    1.ArrayAdapter 适配器的作用是数据和视图之间的转换 ArrayList<E> data=new ArrayList<E>(); new ArrayAdapter& ...

  4. 表格为一条细线的html代码,html制作细线表格的简单实例

    原标题:html制作细线表格的简单实例 关于这个细线表格的制作方法,百度一下可能就会有答案告诉你设置这几个值:给table设置border="0" cellspacing=&quo ...

  5. 甘教课标版小学生计算机课,测评:《第6课 制作简单的表格教案》小学信息技术甘教课标版五年级上册教案4696(2)...

    5.如果应改变表格的长度跟高度,则把鼠标移到表格的竖线和横线上,当鼠标变成"|"和"="时,按住滑鼠左键,拖动鼠标,即可拖动半径和高度. 6.在表格中输入火车时 ...

  6. 微信小程序之图表系列——最简单的表格制作

    一图胜千言,相信很多开发者都没有绕开过图表制作这个坑,在小程序中也是,当然可以用第三方echart等制图插件来做,但小程序要求代码量最大12M,还得分好几个包,一个echart插件就将近1M,要是只做 ...

  7. 通用型简单latex模板&表格制作

    转一个很好的模板,说他好是因为他包含了在latex下创建一个文件所需要用到的几乎所有的基本文档设置:页面,正文,字体, 发信人: ceo (神), 信区: MathTools 标 题: 我的通用型简单 ...

  8. 怎么在Word中制作表格?简单的Word表格制作方法分享

    提到表格,大家第一时间想到的就是Excel表格,因为Excel本身就是一个制作表格的工具,但是你知道吗?Word也可以制作表格,而且方法也很简单,那么怎么在Word中制作表格呢?下面小编就为大家分享五 ...

  9. 简单解析表格table标签的用法

    简单解析表格table标签的用法 1.表格加上边框并且效果如下图所示: cellspacing(单元格间距): 表格边框与单元格的边框之间的缝隙 cellpadding(单元格边距): 单元格内容与单 ...

最新文章

  1. 协防差_西班牙男篮的投篮比美国还差 为什么在2019年世界杯夺冠
  2. Linux进程地址空间学习总结
  3. [转帖]Runtime, Engine, VM 的区别是什么?
  4. 【scratch】实用作品方案:微信抽奖机,Scratch编程教育作品
  5. 马赛克,克星,真来了!
  6. c 命令导出数据到mysql_MySQL命令行导出数据库
  7. linux非阻塞的socket发送数据出现EAGAIN错误的处理方法
  8. windows 10右键项添加Notepad++ 和插件管理
  9. 报错 hint: Updates were rejected because the remote contains work that you do 解决方法
  10. 链表(c语言),c语言链表(c语言链表详解)
  11. python乌龟吃鱼小游戏(类和对象及Easygui应用)
  12. Plustoken重要操盘手已被遣返回国,警方正全力侦查
  13. 如何快速分割多个视频,提取每个原音频单独保存
  14. LeetCode-----第113题-----路径总和 II
  15. 世唐科技:秒懂什么是区块链
  16. java程序员拜年代码_程序员的新年祝福是什么样的?
  17. java分页类Page
  18. 邮件出现延时的本质究竟是什么......
  19. 处理Emoji表情(unicode)
  20. 用python编程 商品打折怎么计算_买东西打折是怎么算的!

热门文章

  1. 低延迟长续航手游伴侣—HyperX Cloud Buds云雀蓝牙无线游戏耳机
  2. 什么是SQL注入,防御、绕过
  3. Excel中文本处理函数
  4. 上传1M以内的图片 修改图片大小的方法
  5. matlab画傅立叶变换后相位谱,对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要?...
  6. CSS简笔画:纯CSS绘制一顶帽子
  7. 大学里应该重点学习哪门技术语言
  8. Node.js爬虫一站到底系列先导篇
  9. 外连接(左连接和右连接)
  10. 金稻壳安全狗:企业级电脑监控软件的终极选择