QT的视图类(QTableView和QListView)(一)
QTableView开发工具QT CreatorQTableView用于显示表格形式的数据其中数据呈现为行和列。适合用于多维数据结构比如电子表格、数据表格等。通常与QAbstractTableModel或QStandardItemModel配合使用来提供数据源。1、QTableView和QStandardarItemModel配合使用void MainWindow::StandardItemModelTest() { // 创建一个3*3的model并设置数据 QStandardItemModel *model new QStandardItemModel(3, 3); model-setItem(0, 0, new QStandardItem(Alice)); model-setItem(0, 1, new QStandardItem(25)); model-setItem(0, 2, new QStandardItem(Engineer)); model-setItem(1, 0, new QStandardItem(Bob)); model-setItem(1, 1, new QStandardItem(30)); model-setItem(1, 2, new QStandardItem(Doctor)); model-setItem(2, 0, new QStandardItem(Charlie)); model-setItem(2, 1, new QStandardItem(35)); model-setItem(2, 2, new QStandardItem(Artist)); // 给view设置model ui-tableView-setModel(model); }注意必须要保证model的生命周期足够长如果在该函数函数中仅仅是定义了一个QStandardItemModel model(3, 3) 这样的model函数结束后model的生命周期结束会导致数据不会显示。解决方案第一种使用指针如上面例子。第二种将model作为类的成员变量。从模型中删除特定的数据或删除整行、整列的数据。//下面代码中row表示第几行从0开始,col表示第几列从0开始 // 往已有的model中添加新的数据 // 方式一 model-setItem(row, 0, new QStandardItem(Charlie)); model-setItem(row, 1, new QStandardItem(35)); model-setItem(row, 2, new QStandardItem(Artist)); //方式二 // 在模型末尾添加新的一行 QListQStandardItem* newRow; newRow.append(new QStandardItem(David)); newRow.append(new QStandardItem(28)); newRow.append(new QStandardItem(Teacher)); model-appendRow(newRow); // 方式三 // 在指定的一行添加 QListQStandardItem* newRow2; newRow2.append(new QStandardItem(Eve)); newRow2.append(new QStandardItem(22)); newRow2.append(new QStandardItem(Designer)); model-insertRow(row, newRow2); // 往已有的model中删除数据 //删除行 model-removeRow(row); //删除第row行 model-removeRows(row, 2); // 删除从第row行开始的2行 //删除列 model-removeColumn(col); // 删除某一个单元格 model-setItem(row, col, nullptr);// 如果需要可以强制刷新视图 ui-tableView-reset();2、QTableView和QAbstractTableModel配合使用QAbstractTableModel的目的是将数据与视图比如QTableView分离使得数据的显示和操作逻辑与视图的显示和交互逻辑解耦。需要实现几个必要的虚拟方法rowCount()返回模型中的行数必须实现。columnCount()返回模型中的列数data()返回指定索引的单元格数据headerData()返回表格的列和行头部数据// mymodel.h #ifndef MYMODEL_H #define MYMODEL_H #include QObject #include QAbstractTableModel #include QList struct ModelItem { QString strName; int nSex; int nAge; QString strTel; }; class MyModel: public QAbstractTableModel { public: MyModel(QObject *parent nullptr); int rowCount(const QModelIndex parent QModelIndex()) const override ; int columnCount(const QModelIndex parent QModelIndex()) const override; QVariant data(const QModelIndex index, int role Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QListModelItem modelData; void update(const ModelItem item); void remove(); }; #endif // MYMODEL_H// mymodel.cpp #include mymodel.h MyModel::MyModel(QObject *parent) :QAbstractTableModel (parent) { modelData QListModelItem { {Aria, 0, 22, 110}, {Bab, 1, 21, 120}, {KangKang, 1, 24, 109}, }; } int MyModel::rowCount(const QModelIndex parent) const{ return modelData.count(); } int MyModel::columnCount(const QModelIndex parent) const{ return 4; } QVariant MyModel::data(const QModelIndex index, int role) const{ if (!index.isValid()) return QVariant(); if (role Qt::DisplayRole || role Qt::EditRole) { const int row index.row(); switch (index.column()) { case 0: return modelData.at(row).strName; case 1: return (modelData.at(row).nSex 0) ? woman : man; case 2: return modelData.at(row).nAge; case 3: return modelData.at(row).strTel; } } return QVariant(); } QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const { if(role Qt::DisplayRole orientation Qt::Horizontal) { switch(section) { case 0: return QString(name); case 1: return QString(sex); case 2: return QString(age); case 3: return QString(tel); } } return QVariant(); } void MyModel::update(const ModelItem item) { ModelItem data item; modelData.push_back(data); int row modelData.count(); beginInsertRows(QModelIndex(), row, row); endInsertRows(); } void MyModel::remove() { int row modelData.count() - 1; // 确保行号有效 if (row 0 || row modelData.count()) return; // 通知模型删除数据前的变化 beginRemoveRows(QModelIndex(), row, row); // 删除数据 modelData.removeAt(row); // 通知模型删除数据后的变化 endRemoveRows(); }// 使用 QAbstractTableModel 的视图 QTableView *tableView new QTableView(this); MyModel *model new MyModel (); tableView-setModel(model);

相关新闻

QT的视图类(QTableView和QListView)(二)

QT的视图类(QTableView和QListView)(二)

QListView 开发工具:QT Creator QListView 是 Qt 中用于显示列表数据的视图控件。它继承自 QAbstractItemView,通常与模型(如 QStringListModel、QStandardItemModel 或自定义模型)配合使用,用于呈现数据项的列表。 1、…

2026/8/14 6:55:14 阅读更多 →
Windows系统文件ubpm.dll丢失找不到问题解决

Windows系统文件ubpm.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/8/14 6:55:14 阅读更多 →
企业智脑2.2.0版本预告:畅谈五大AI数字员工板块规划,如何用数字员工重塑商业生态?

企业智脑2.2.0版本预告:畅谈五大AI数字员工板块规划,如何用数字员工重塑商业生态?

引言:当数字员工成为企业新器官 2025年,全球企业数字化转型已进入"数字器官移植"阶段。企业智脑2.0推出的数字员工板块,首次实现了从单点智能到生态智能的跨越。不同于传统RPA工具,这套系统通过五大相互联动的子模块&am…

2026/8/14 6:55:14 阅读更多 →

最新新闻

express-cdn高级配置:自定义日志、SSL支持与CDN域名管理

express-cdn高级配置:自定义日志、SSL支持与CDN域名管理

express-cdn高级配置:自定义日志、SSL支持与CDN域名管理 【免费下载链接】express-cdn :cloud: Node module for delivering optimized, minified, mangled, gzipped assets with Express and Amazons CDN (S3/CloudFront) 项目地址: https://gitcode.com/gh_mirr…

2026/8/14 7:50:32 阅读更多 →
Linux网络编程:TCP/IP协议与Socket实战详解

Linux网络编程:TCP/IP协议与Socket实战详解

1. Linux网络协议与编程基础:TCP/IP协议族全解析第一次在Linux下用Socket写网络程序时,我盯着connect()函数返回的"Connection refused"错误整整排查了两小时——直到用netstat命令发现服务端根本没监听端口。这个惨痛教训让我意识到&#xff…

2026/8/14 7:50:32 阅读更多 →
深入解析TCP/IP协议族与Linux网络编程实战

深入解析TCP/IP协议族与Linux网络编程实战

1. TCP/IP协议族概述:网络通信的基石在Linux系统编程中,TCP/IP协议族就像城市的地下管网系统——虽然看不见摸不着,却支撑着所有网络应用的正常运行。作为开发者,我曾花了三个月时间追踪一个诡异的网络超时问题,最终发…

2026/8/14 7:50:32 阅读更多 →
AI辅助数学研究:Claude在黎曼猜想等复杂问题中的实践指南

AI辅助数学研究:Claude在黎曼猜想等复杂问题中的实践指南

这次我们来看一个非常有意思的话题:Claude 在数学研究,特别是黎曼猜想证明过程中的潜在作用。标题里提到的“推动黎曼猜想证明率跃升25.6个百分点”是一个引人注目的说法,它指向了AI辅助科研,尤其是大语言模型(LLM&…

2026/8/14 7:50:32 阅读更多 →
AI辅助数学研究实战:Claude赋能黎曼猜想探索与代码实现

AI辅助数学研究实战:Claude赋能黎曼猜想探索与代码实现

最近在数学和AI交叉领域,一个引人注目的讨论是:以Claude为代表的大型语言模型(LLM)如何辅助推进像黎曼猜想这样的顶级数学难题的研究。虽然“证明率跃升25.6个百分点”是一个形象化的表述,并非严格的数学度量&#xff…

2026/8/14 7:50:32 阅读更多 →
PostgreSQL序列全解析:从创建、查询到删除与SQL生成

PostgreSQL序列全解析:从创建、查询到删除与SQL生成

1. 序列:PostgreSQL中的“自增ID”生成器在数据库设计里,我们经常需要为表的主键或某些唯一标识字段生成一个自动递增的数字。如果你是从MySQL转过来的,第一反应可能是AUTO_INCREMENT。但在PostgreSQL的世界里,实现这个功能的核心…

2026/8/14 7:49:32 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →