#include "Model.h"
//Model
Model::Model(int iTotalCol, QStringList qstrlstHeader, QList<int> lstNonEditableCols,
QObject *parent) : QAbstractTableModel(parent),
m_lstNonEditableCols(lstNonEditableCols),
m_iTotalCol(iTotalCol), m_qstrlstHeader(qstrlstHeader)
{
}
int Model::rowCount(const QModelIndex &) const
{
return m_data.size();
}
int Model::columnCount(const QModelIndex &) const
{
return m_iTotalCol;
}
QVariant Model::data(const QModelIndex &index, int role) const
{
int i = index.row(), j = index.column();
if ((i >= 0) && (i < m_data.size()))
{
if(m_data.at(i).size() > j)
{
if(role == Qt::DisplayRole)
{
//m_data的类型是QList<QStringList>,每一个QStringList对应表格里一行数据
//m_data.at(i).at(j)对应的就是第i行,第j列的数据
return m_data.at(i).at(j);
}
else if(role == Qt::TextAlignmentRole)
return Qt::AlignCenter;
else
{
}
}
else
{
return QString("");
}
}
else
{
}
return QVariant();
}
QVariant Model::headerData(int section, Qt::Orientation orientation, int role) const
{
if(role == Qt::DisplayRole)
{
if(orientation == Qt::Horizontal)//横向排列的标题栏,也就是各个列的标题
{
if(m_qstrlstHeader.size() > section)
return m_qstrlstHeader.at(section);
else
{
return QString("");
}
}
else
{
//纵向排列的标题栏,也就是各个行的标题
return QString("");
}
}
else if(role == Qt::TextAlignmentRole)
{
//文字对齐方式设置为居中对齐
return Qt::AlignCenter;
}
else
{
}
return QAbstractTableModel::headerData(section, orientation, role);
}
void Model::vSetData(QList<QStringList> & lstData)
{
m_data.clear();
m_data.append(lstData);
//发出dataChanged信号,界面上才更新表格内容
emit dataChanged(createIndex(0,0), createIndex(0, columnCount()-1));
}
Qt::ItemFlags Model::flags(const QModelIndex &index) const
{
if(m_lstNonEditableCols.contains(index.column()))
//假如index对应的列是不可编辑的列
return QAbstractTableModel::flags(index);
else
//假如index对应的列是可编辑的列,就给它添加ItemIsEditable属性
return Qt::ItemIsEditable | QAbstractTableModel::flags(index);
}
bool Model::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(role == Qt::EditRole)
{
//编辑单元格之后,用编辑结果更新对应的m_data
int row = index.row(), col = index.column();
QStringList qstrlst = m_data.at(row);
qstrlst.replace(col, value.toString());
m_data.replace(row, qstrlst);
}
return true;
}
金色熊族
- 粉丝: 623
- 资源: 33
最新资源
- 基于Comsol光学仿真:光子晶体光纤及其应用技术研究,comsol光学仿真 光子晶体光纤 lunwen复现 基于SPR的光纤传感器 光子晶体光纤偏振分束器 石墨烯-黑磷增强SPR等离子 体谐振传感
- 射击游戏下载7.1版本
- "MATLAB Simulink中的两相交错并联Buck降压斩波电路仿真模型:电压闭环控制与定制化应用",MATLAB Simulink,两相交错并联Buck(降压斩波)电路仿真模型,电压闭环控制,仿
- 零模型绘图实例数据和绘图代码
- "高压导入下COMSOL热击穿模型与材料温度升高的绝缘失效研究",comsol热击穿模型,高压导入后使得材料温度升高失去绝缘能力 ,COMSOL;热击穿模型;高压导入;材料温度升高;失去绝缘能力
- Comsol变压器电路磁场振动多物理场耦合仿真技术:电磁场与固体力学求解及磁致伸缩下铁心振动规律解析,Comsol变压器电路-磁场-振动多物理场耦合仿真,求解了电磁场和固体力学,描述了在磁致伸缩下的变
- "基于C# Framework的OCR文本自动标注工具:多功能的文字识别与图像标注系统",OCR文本自动标注工具,Ocr文字识别,OCR图像识别 OCR标注工具 自动识别文字区域,并自动标注,支持单张
- 基于Qt C++的节点式图形编辑器:支持树形节点管理、面板缩放、接口连接与删除功能,并可导出节点图片的编辑工具,Qt C++实现的节点式图形编辑器,可以添加左侧树上的节点,面板可以放大缩小,节点之间有
- 《基于双矢量MPC的永磁同步电机电流预测控制技术及其优化研究》,永磁同步电机双矢量MPC模型预测电流控制(有参考文献) 参考文献:《永磁同步电机双矢量模型预测电流控制-徐艳平》 1在占空比模型预测
- 基于扩张状态观测器的三相永磁同步电机模型预测控制的纯m语言实现策略研究,基于扩张状态观测器的三相永磁同步电机模型预测控制 (纯.m语言实现ESO+MPC) ,核心关键词:扩张状态观测器(ESO);
- "COMSOL瓦斯抽采案例:深入探讨不同抽采数学模型理论与实际操作过程,涵盖不同渗透率模型、有效应力分布媒体变形、瓦斯抽采量及压力分布,对比不同地应力工况,附有数个详细视频解析理论分析及模型建立过程
- 基于Comsol超表面技术的折射率传感器研究:电磁诱导透明EIT与BIC的典型应用,Comsol超表面折射率传感器 电磁诱导透明EIT和典型连续体中的束缚态BIC ,Comsol超表面; 折射率传
- 三电平VIENNA整流器:电压电流双闭环控制与中点电位平衡策略的仿真研究,三电平VIENNA维也纳双闭环控制整流器仿真参考文献 参考文献:《维也纳整流器研究-魏亚坤》 1 控制:采用电压电流
- Simulink下四组多储能电池SOC均衡控制仿真模型:高效均衡策略与Stateflow控制下的充放电电流及SOC动态调整设计,Simulink 多储能电池组(4组)SOC均衡控制仿真模型 模型包含4
- 斜齿轮时变啮合刚度精准计算程序:基于累积积分势能法并考虑接触线时变特性和斜齿轮变位的影响,斜齿轮时变啮合刚度计算,采用累积积分势能法编写的斜齿轮啮合刚度程序 程序中考虑了接触线的时变特性和斜齿轮变位
- 房屋管理系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈