Qt之QTableView的简单使用(含源码+注释)

article/2025/10/23 10:18:08

文章目录

  • 一、QTableView操作示例图
  • 二、QTableView(个人理解)
  • 三、源码
    • CMainWindow.h
    • CMainWindow.cpp
  • 四、拓展:代理的使用
  • 总结
  • 相关文章

一、QTableView操作示例图

下图为QTableView简单使用示例图,其中包含设置、获取、新建item等操作,源码在本文第三节(源码含详细注释)。
在这里插入图片描述
提示:不会使用Qt设计师设计界面的小伙伴点击这里

二、QTableView(个人理解)

  1. QTableView是类似MVC(Model View Controller)模式,但在这里的Controller变成了Delegate;
  2. 使用QTableView显示数据需要配合QStandardItemModel,但是其子类QTableWidget则不需要,但是QTableView的可操作性远高于QTableWidget;
  3. 上方说到QTableView的可操作高于QTableWidget,是因为QTableView包含Delegate(代理),Delegate是真正将控件添加到QTableView中的;如setIndexWidget()只是单纯将控件放在item上,当QTableView进行添加/删除操作时,setIndexWidget()的控件不会随着行列改变而改变位置,但通过Delegate设置的控件就不会受影响。
    提示:强烈推荐学习QTableView的小伙伴了解Delegate(代理),请查看Qt代理的实现(按钮篇)、Qt代理的实现(常规控件篇)

三、源码

CMainWindow.h

#ifndef CMAINWINDOW_H
#define CMAINWINDOW_H#include <QMainWindow>
#include <QStandardItemModel>   //数据模型类namespace Ui {
class CMainWindow;
}class CMainWindow : public QMainWindow
{Q_OBJECTpublic:explicit CMainWindow(QWidget *parent = 0);~CMainWindow();private slots://获取指定位置的值void on_getIndexDataBtn_clicked();//设置指定位置的值void on_setIndexDataBtn_clicked();private:Ui::CMainWindow     *ui;QStandardItemModel  *m_pModel;  //数据模型对象指针
};#endif // CMAINWINDOW_H

CMainWindow.cpp

#include "CMainWindow.h"
#include "ui_CMainWindow.h"CMainWindow::CMainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::CMainWindow)
{ui->setupUi(this);this->setWindowTitle("QTableView简单使用");//建立模型对象空间并指定父对象m_pModel = new QStandardItemModel(ui->tableView);//将数据模型设置到表对象上ui->tableView->setModel(m_pModel);//! 添加数据(添加数据包含多种方式),我个人主要使用如下几个函数//! 添加指定位置的item: void QStandardItemModel::setItem(int row, int column, QStandardItem *item)//! 添加指定行首列的item: void QStandardItemModel::setItem(int row, QStandardItem *item)//! 追加一列: void appendColumn(const QList<QStandardItem *> &items)//! 追加一行: void appendRow(const QList<QStandardItem *> &items)//循环添加三行数据for(int index = 0; index != 3; ++index){m_pModel->appendRow(QList<QStandardItem *>()<< new QStandardItem(QString("第%1行,第0列").arg(index))<< new QStandardItem(QString("第%1行,第1列").arg(index)));}//添加指定位置的数据m_pModel->setItem(3, 2, new QStandardItem(QString("第3行,第2列")));
}CMainWindow::~CMainWindow()
{//! 析构函数://! 有些小伙伴会发现我没有析构model对象,//! 那是因为我在获取对象空间的时候指定了父对象,//! 当其父对象析构时,会先析构其子对象为指针的对象。delete ui;
}void CMainWindow::on_getIndexDataBtn_clicked()
{//通过行、列编辑栏获取指定位置的item指针QStandardItem *item = m_pModel->item(ui->rowEdit->text().toInt(), ui->columnEdit->text().toInt());//判断指针是否为空,为空则设置提示并返回if(nullptr == item){ui->valueEdit->setText("指定的item不存在");return;}//获取item的值并设置到值编辑框中ui->valueEdit->setText(item->text());}void CMainWindow::on_setIndexDataBtn_clicked()
{//通过行、列编辑栏获取指定位置的item指针QStandardItem *item = m_pModel->item(ui->rowEdit->text().toInt(), ui->columnEdit->text().toInt());//判断指针是否为空if(nullptr == item){//为空则新建item设置到数据模型对象中m_pModel->setItem(ui->rowEdit->text().toInt(), ui->columnEdit->text().toInt(), new QStandardItem(ui->valueEdit->text()));}else{//不为空则直接获取值设置到item中item->setText(ui->valueEdit->text());}
}

四、拓展:代理的使用

代理的使用步骤:

  1. 创建代理对象指针
  2. 连接信号槽
  3. 设置代理位置
    提示:设置好后在其设置的位置会自动创建代理控件(常规控件需要双击调用)
//new出代理对象,并设置到相应列m_delegate = new CButtonDelegate;connect(m_delegate, &CButtonDelegate::clicked, this, &CMainWindow::on_itemClick);   //连接槽函数ui->tableView->setItemDelegateForColumn(2, m_delegate);

总结

虽然QTableView使用稍微繁琐,但是QTableView比QTableWidget灵活度更高,我个人建议尽量使用QTableView。对于代理,要是能掌握更好,因为其不但能提供不同控件,并且提供的控件不model的行列变化影响。
最后,好久不见,继续加油吧!

相关文章

Qt代理的实现(按钮篇,含源码+注释)
Qt代理的实现(常规控件篇,含源码+注释)
Qt之QTableView设置多列表头复选框(自定义QHeaderView)、单元格复选框(含源码+注释)
Qt之QSortFilterProxyModel的简单使用(QTableView搜索功能,含源码+注释)
Qt之QTreeView的简单使用(含源码+注释)
Qt之QListView的简单使用(含源码+注释)

友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 ^o^/)

注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除


http://chatgpt.dhexx.cn/article/oobEjFlc.shtml

相关文章

QTableView 基本使用

一、简介 表格视图控件 QTableView&#xff0c;需要和 QStandardItemModel 配套使用&#xff0c;这套框架是基于 MVC 设计模式设计的&#xff0c;M(Model) 是 QStandardItemModel 数据模型不能单独显示出来。V(view) 是指 QTableView 视图&#xff0c;要来显示数据模型&#x…

QTableView详细使用说明

QTableView详细使用说明 创建QTableView表格标题设置表格的标题获取表格的标题 数据操作插入数据删除数据 属性设置设置表格的对齐方式设置表格的宽高设置表格的线属性 自定义菜单eventFilter方法重载eventFilter()启用事件监听实现事件过滤函数 设置菜单属性方法设置属性关联信…

web前端新手面试指南:自我介绍

面试时注意&#xff1a;自我介绍不能太长&#xff0c;也不能过短&#xff0c;3分钟左右最合适&#xff0c;尤其做为web前端技术方面的面试&#xff0c;更加要说到点上&#xff0c;我依次从学习方面、项目实践、未来规划这三个方面写下web前端面试的自我介绍。 您好&#xff0c;…

Web前端面试自我介绍对话技巧注意事项

大家在学会了web前端技术后&#xff0c;当然是要准备找一个适合自己的web前端工作了&#xff0c;那么面试环节是必不可少的&#xff0c;有一个良好的自我介绍表述&#xff0c;在HR心中也能加分不少&#xff0c;接下来小编就为大家介绍一下Web前端面试自我介绍对话技巧注意事项。…

前端面试自我介绍的技巧都有哪些?

前端面试自我介绍的技巧都有哪些? 在前端面试自我介绍的时候&#xff0c;可能会遇到两种情况&#xff1a;允许主动和不允许主动&#xff01; 允许主动的情况下&#xff0c;前端程序员应该详细的介绍自己技能树&#xff0c;结合工作经历&#xff0c;展示给面试官自己对项目和…

JVM coredump

JVM crash分析 Java程序运行的时候&#xff0c;遇到了coredump的现象。最后定位到时JIT导致的bug。 http://www.oracle.com/technetwork/java/javase/crashes-137240.html#gbyzu 这里记录下JVMcrash产生的文件怎么去定位问题&#xff0c;但是一般不会遇到crash&#xff0c;h…

coredump 使用总结

1. core dump简介&#xff1a; A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed). In practice, other key pieces of program state are usually dumped…

【linux】coredump问题排查

序言 记录coredump问题的一些定位技巧 1. coredump简介 coredump称为核心转储&#xff0c;就是在进程异常时的一个快照&#xff0c;保存了异常时的内存、寄存器、堆栈等数据当进程接收到某些 信号 而导致异常退出时&#xff0c;就会生成 coredump 文件core文件是ELF文件格式…

Core Dump核心转储

核心转储&#xff08;core dump&#xff09;&#xff0c;在汉语中有时戏称为吐核&#xff0c;是操作系统在进程收到某些信号而终止运行时&#xff0c;将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试。 概述 编辑 在UNIX系统中…

coredump文件的生成以及如何调试coredump文件?

生成coredump文件的相关配置 1. 首先通过 ulimit -a 命令&#xff0c;查看是否允许coredump文件生成; 如下图所示&#xff0c;core文件大小限制为0&#xff0c;即&#xff1a;不允许core文件生成 2. 使用 ulimit -c [kbytes] 命令更改core文件大小的限制 或者 通过 ulimit -c…

android生成coredump,详解coredump--全面

From: http://blog.csdn.net/tenfyguo/article/details/8159176 一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条…

coredump文件是如何生成的

目录 一、coredump 文件生成过程 二、coredump文件生成原理 1. 信号处理 do_signal() 2. 生成 coredump 文件 三、生产环境应该打开 coredump 功能吗&#xff1f; 人都会犯错&#xff0c;所以在编写程序时难免会出现 BUG。 有些 BUG 是业务逻辑上的错误导致的&#xff0c…

Coredump 详解

引言 当程序运行的过程中异常终止或崩溃&#xff0c;操作系统会将程序当时的内存状态记录下来&#xff0c;保存在一个文件中&#xff08;core文件&#xff09;&#xff0c;这种行为就叫做 Core Dump 或者叫做 ‘核心转储’&#xff0c;利用 coredump 可以帮助我们快速定位程序…

CoreDump追踪

当程序运行的过程中异常终止或崩溃&#xff0c;操作系统会将程序当时的内存状态记录下来&#xff0c;保存在一个文件中&#xff0c;这种行为就叫做Core Dump&#xff08;中文有的翻译成“核心转储”)。我们可以认为 core dump是“内存快照”&#xff0c;但实际上&#xff0c;除…

coredump详解

原文地址&#xff1a;https://blog.51cto.com/u_15471709/4868198 一&#xff0c;什么是coredump 我们经常听到大家说到程序core掉了&#xff0c;需要定位解决&#xff0c;这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止&#xff0c;并且在满…

linux之fping命令

fping检测主机是否存在,fping命令 fping类似于ping&#xff0c;但比ping强大。与ping要等待某一主机连接超时或发回反馈信息不同&#xff0c;fping给一个主机发送完数据包后&#xff0c;马上给下一个主机发送数据包&#xff0c;实现多主机同时ping&#xff0c;fping还可以在命令…

linux fping参数,linux下,fping命令与ping命令解析

ping Linux系统的ping命令是常用的网络命令&#xff0c;它通常用来测试与目标主机的连通性。 1.命令格式&#xff1a; ping [参数] [主机名或IP地址] 2.命令功能&#xff1a; ping命令用于&#xff1a;确定网络和各外部主机的状态&#xff1b;跟踪和隔离硬件和软件问题&#xf…

php fping,【Linux 命令】fping ping 包间隔时间详解

服务器间检查会用到fping的命令,期间遇到了一个问题,需要将ping包间的间隔时间设置为100毫秒,查看fping -h看下,找到了-i和-p两个参数: 看到这两个参数,我当时的表情是这样的: 看不懂,那就测吧: 先来-i: 间隔1s,没有生效.! 再试试-p OK,这个生效了,但-i 和-p的区别是…

fping使用

【-4】-ipv4仅PING IPv4地址 【-6】-ipv6仅PING IPv6地址 【-b】 指定数据&#xff0c;以字节发送&#xff08;默认值&#xff1a;56&#xff09; 【-c】指定发送的数量 【-f】读取一个文件里面的ip 【-g】扫描一个c段 【--ttl】设置ttl值 当这是为ttl1时&#xff0c;未检测到1…

linux yum fping,ping fping

通过ping来监测对端网络状态 ping fpinf在windows和linux上的参数是不同的&#xff0c;返回的结果也是不同的 在网络连通性监测方面用的比较多&#xff0c;在py go中调用命令&#xff0c;对返回的结果使用正则来在文本中挑出所需要的数据信息 windows中的ping参数 fping fping只…