QAbstractTableModel表格制作简单解析
目录
一、前言
二、效果展示
三、源码解析
四、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表格制作简单解析相关推荐
- 使用matlab建立个人简历,HTML 使用表格制作简单的个人简历
复习一下HTML,用表格做一个简单的个人简历 .btbg{ text-align:center; } 个人简历 姓名 性别 出生日期 照片 民族 政治面貌 婚姻状况 现所在地 籍贯 学历 毕业学校 专 ...
- HTML 使用表格制作简单的个人简历
复习一下HTML,用表格做一个简单的个人简历 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- ListView制作简单表格
1.ArrayAdapter 适配器的作用是数据和视图之间的转换 ArrayList<E> data=new ArrayList<E>(); new ArrayAdapter& ...
- 表格为一条细线的html代码,html制作细线表格的简单实例
原标题:html制作细线表格的简单实例 关于这个细线表格的制作方法,百度一下可能就会有答案告诉你设置这几个值:给table设置border="0" cellspacing=&quo ...
- 甘教课标版小学生计算机课,测评:《第6课 制作简单的表格教案》小学信息技术甘教课标版五年级上册教案4696(2)...
5.如果应改变表格的长度跟高度,则把鼠标移到表格的竖线和横线上,当鼠标变成"|"和"="时,按住滑鼠左键,拖动鼠标,即可拖动半径和高度. 6.在表格中输入火车时 ...
- 微信小程序之图表系列——最简单的表格制作
一图胜千言,相信很多开发者都没有绕开过图表制作这个坑,在小程序中也是,当然可以用第三方echart等制图插件来做,但小程序要求代码量最大12M,还得分好几个包,一个echart插件就将近1M,要是只做 ...
- 通用型简单latex模板&表格制作
转一个很好的模板,说他好是因为他包含了在latex下创建一个文件所需要用到的几乎所有的基本文档设置:页面,正文,字体, 发信人: ceo (神), 信区: MathTools 标 题: 我的通用型简单 ...
- 怎么在Word中制作表格?简单的Word表格制作方法分享
提到表格,大家第一时间想到的就是Excel表格,因为Excel本身就是一个制作表格的工具,但是你知道吗?Word也可以制作表格,而且方法也很简单,那么怎么在Word中制作表格呢?下面小编就为大家分享五 ...
- 简单解析表格table标签的用法
简单解析表格table标签的用法 1.表格加上边框并且效果如下图所示: cellspacing(单元格间距): 表格边框与单元格的边框之间的缝隙 cellpadding(单元格边距): 单元格内容与单 ...
最新文章
- 协防差_西班牙男篮的投篮比美国还差 为什么在2019年世界杯夺冠
- Linux进程地址空间学习总结
- [转帖]Runtime, Engine, VM 的区别是什么?
- 【scratch】实用作品方案:微信抽奖机,Scratch编程教育作品
- 马赛克,克星,真来了!
- c 命令导出数据到mysql_MySQL命令行导出数据库
- linux非阻塞的socket发送数据出现EAGAIN错误的处理方法
- windows 10右键项添加Notepad++ 和插件管理
- 报错 hint: Updates were rejected because the remote contains work that you do 解决方法
- 链表(c语言),c语言链表(c语言链表详解)
- python乌龟吃鱼小游戏(类和对象及Easygui应用)
- Plustoken重要操盘手已被遣返回国,警方正全力侦查
- 如何快速分割多个视频,提取每个原音频单独保存
- LeetCode-----第113题-----路径总和 II
- 世唐科技:秒懂什么是区块链
- java程序员拜年代码_程序员的新年祝福是什么样的?
- java分页类Page
- 邮件出现延时的本质究竟是什么......
- 处理Emoji表情(unicode)
- 用python编程 商品打折怎么计算_买东西打折是怎么算的!