首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

QTableView使用示例-Qt模型视图代理(Model-View-Delegate)使用示例

移动开发 10.72KB 31 需要积分: 1
立即下载

资源介绍:

本实例基于QT的委托代理机制实现的Qt模型视图代理(Model-View-Delegate)使用示例。以QTableView为基础,实现表头排序,列表复选框,插入按钮、下拉框、进度条。 模型视图委托(MVD)是Qt中特有的设计模式,类似MVC设计模式,将MVC设计模式中的Controller当做MVD中的Delegate,两者的概念基本相同。不同的是委托不是独立存在,而是包含在视图里面。 模型视图委托设计模式中,模型负责存储和管理数据;视图负责显示数据,其中界面的框架和基础信息是视图负责,具体数据的显示是委托负责;委托不仅仅负责数据的显示,还有一个重要的功能是负责数据的编辑,如在视图中双击就可以编辑数据。
#include "studenttablemodel.h" #include "student.h" enum Property { ID, NAME, AGE, GENDER, ACHIEVEMENT, MENUBUTTON, PROCESS }; QVariant StuedentTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return false; int row = index.row(); int col = index.column(); Student *stu = m_students.at(row); switch (role) { case Qt::TextAlignmentRole: return Qt::AlignCenter; case Qt::CheckStateRole: switch (col) { case ID: return stu->checked; default: break; } break; case Qt::DisplayRole: case Qt::EditRole: { //双击为空需添加 switch (col) { case ID: return stu->id; case NAME: return stu->name; case AGE: return stu->age; case GENDER: return stu->gender; case ACHIEVEMENT: return stu->achievement; case MENUBUTTON: return tr("Detail"); case PROCESS: return stu->process; default: break; } case Qt::UserRole: { switch (col) { case MENUBUTTON: return QVariant::fromValue(stu); default: break; } } } default: break; } return QVariant(); } bool StuedentTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid()) return false; int row = index.row(); int col = index.column(); Student *stu = m_students[row]; switch (role) { case Qt::CheckStateRole: switch (col) { case ID: stu->checked = !stu->checked; emit dataChanged(index, index); return true; default: break; } break; case Qt::EditRole: switch (col) { case ID: stu->id = value.toUInt(); break; case NAME: stu->name = value.toString(); break; case AGE: stu->age = value.toUInt(); break; case GENDER: stu->gender = value.toString(); break; case ACHIEVEMENT: stu->achievement = value.toUInt(); break; case PROCESS: stu->process = value.toUInt(); break; } emit dataChanged(index, index); return true; default: break; } return false; } QVariant StuedentTableModel::headerData(int section, Qt::Orientation orientation, int role) const { const QStringList names = {tr("ID"), tr("姓名"), tr("年龄"), tr("性别"), tr("成绩"), tr("详情"), tr("进度")}; if (section < 0 || section >= names.size()) return QVariant(); if (orientation == Qt::Horizontal && role == Qt::DisplayRole) return names.at(section); return QVariant(); } Qt::ItemFlags StuedentTableModel::flags(const QModelIndex &index) const { Qt::ItemFlags flags = QAbstractTableModel::flags(index); flags |= Qt::ItemIsEditable; if (index.column() == ID) flags |= Qt::ItemIsUserCheckable; return flags; } void StuedentTableModel::setStudents(const QList &students) { beginResetModel(); //重置数据之前调用,会自动触发 modelAboutToBeReset 信号 m_students = students; endResetModel(); //重置数据完成后调用,会自动触发 modelReset 信号 }

资源文件列表:

TabViewModel.zip 大约有18个文件
  1. TabViewModel/
  2. TabViewModel/buttondelegate.cpp 2.59KB
  3. TabViewModel/buttondelegate.h 636B
  4. TabViewModel/comboboxdelegate.cpp 943B
  5. TabViewModel/comboboxdelegate.h 750B
  6. TabViewModel/main.cpp 194B
  7. TabViewModel/mainwindow.cpp 2.21KB
  8. TabViewModel/mainwindow.h 428B
  9. TabViewModel/progressbardelegate.cpp 1.51KB
  10. TabViewModel/progressbardelegate.h 436B
  11. TabViewModel/sortfilterproxymodel.cpp 654B
  12. TabViewModel/sortfilterproxymodel.h 436B
  13. TabViewModel/student.h 339B
  14. TabViewModel/studenttablemodel.cpp 3.27KB
  15. TabViewModel/studenttablemodel.h 907B
  16. TabViewModel/stuedenttable.cpp 1.89KB
  17. TabViewModel/stuedenttable.h 586B
  18. TabViewModel/TabViewModel.pro 1.33KB
0评论
提交 加载更多评论
其他资源 F4-OOP.zip,面向对象编程
F4-OOP.zip,面向对象编程
F4-Log.zip调试打印
F4-Log.zip调试打印
F103-Capture.zip
输入捕获
Dijkstra算法求解机器人路径规划问题Python程序
Dijkstra算法是一种解决单源最短路径问题的算法,适用于带权的有向图或无向图。它采用贪心策略,逐步找到从源点到其他所有顶点的最短路径。 Dijkstra算法的基本思路是以起始点为中心,向外层层扩展,直到覆盖所有顶点。算法维护一个距离数组(通常记为dis),用来记录源点到每个顶点的最短距离估计,以及一个集合(通常记为S),用来存放已经确定最短路径的顶点。初始时,源点的路径权重赋为0,如果存在直接到达的边,则将邻接顶点的路径长度设为边的权重;对于不存在直接到达的边,则将路径长度设为无穷大。算法不断选取距离最短且未处理过的顶点,更新其邻接顶点的距离,直到所有顶点的最短路径都已确定。
c++操作Clickhouse数据库读取表数据写入文件
c++操作Clickhouse数据库读取表数据写入文件,c++操作Clickhouse很快,配合调度工具,毫秒级就能完成海量数据写入,编译需要gcc 8.0以上,编译后运行gcc 4.2就可以了,经过大量实践,效果很好。 1.升级到gcc8.0以上编译,gcc11.0以上也可以 2.注意cmake的版本,至少3.20以上 3.在项目根目录下简历build目录,然后cmake ./之后,在make 4.运行时注意传递的参数 有任何问题,可以联系。
altera usb3.0开发板资料
usb3.0+altera fpga
“华数杯”全国大学生数学建模竞赛历年优秀论文
基于遗传算法的环形振荡器优化设计 摘要 数字芯片是高端制造业的核心基石,随着工艺尺寸的不断缩小,数字芯片的优化设 计变得尤为要。本文主要以数字芯片中环形振荡器面积最小、功耗最小以及功耗最小时 芯片上能够安放环形振荡器的最大数量为优化目标,建立一系列目标规划模型,基于遗 传算法进行反相器尺寸的设计和求解最优个数,进而使得环形振荡器能够高效运行。 针对问题一,查阅相关文献资料,建立了计算环形振荡器频率的数学模型,然后根 据各指标相关参数,利用 MATLAB 软件,求得 10 种不同设计方案下环形振荡器的输出 频率分别为 15.4611、3.8653、0.9663、4.7629、1.1907、0.2977、3.4868、0.8717、0.3874 和 0.0687 MHz 。 针对问题二,在问题一计算分析的基础上,建立了以环形振荡器最小面积为目标函 数的单目标非线性规划模型,然后结合问题一中的数学模型和各指标的参数值确定约束 条件,采用遗传算法,在约束条件下进行了环形振荡器面积全局最小寻优,最终求解得 出:当环形振荡器的输出频率为10MHz ,反相器个数为 51,反相器中的 PMOS 晶体管
75f0bc5e2c05cb05588cda1329573f79.zip
75f0bc5e2c05cb05588cda1329573f79.zip