文章目录

  • 一、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^/)

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

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

  1. Qt之语言家的简单使用(一)(Qt翻译UI,Qt Linguist的使用,含源码+注释)

    文章目录 一.翻译程序示例图 二.流程须知(个人理解) 三.关于对话框中QDialogButtonBox翻译的操作 四.源码 CLinguistTest.h CLinguistTest.cpp CLi ...

  2. Qt数据库练习之QSqlTableModel的使用(MySql数据库示例,含源码+注释)

    文章目录 一.操作示例 1.1 修改记录(数据) 1.2 添加记录(数据) 1.3 删除记录(数据) 1.4 取消操作 1.5 排序操作 1.6 查询操作 二.了解QSqlTableModel 三.源 ...

  3. Qt之天气预报——界面优化篇(含源码+注释)

    一.界面优化效果 下方为界面优化完成和优化前的效果对比. 优化前: 优化后: 二.优化内容 添加标题栏 添加图片(图图标素材源自阿里巴巴矢量图标库) 更新UI内容(微调大小.布局比例) 添加鼠标事件函 ...

  4. Qt之超简单的TCP通信(自定义TCP通信类,含源码+注释)

    文章目录 一.TCP通信示例图 二.TCP使用前的准备 三.自定义TCP通信类的两种方法 四.源码(含注释) TCP Server CTcpServer.h CTcpServer.cpp TCP Cl ...

  5. Qt小游戏之数字华容道(百行代码搭雏形,可玩;含源码+注释)

    文章目录 一.数字华容道,样图如下 二.废话少说直接上代码 1.首先是代码文件分析 2.CLabel的源码 3.CMainWindow的源码 4.main文件 总结 一.数字华容道,样图如下 相信大家 ...

  6. 使用Qt作窗口截屏(含源码)

    截屏(screenshot),就是将屏幕上的东西拷贝下来存成图片文件.介绍的好像有点多余:(,那我们就直接切入正题. QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上 ...

  7. [qt] 高仿360手机助手[含源码]

    [qt] 高仿360手机助手 实现功能如下: 1. 高仿真界面 2. 获取当前手机屏幕,以及可以截图 3. 获取手机短信/通讯录/应用信息/系统应用信息/视频/音乐. demo版地址: http:// ...

  8. python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)

    最近逐渐打算将工作的环境转移到ubuntu下,突然发现对于我来说,这ubuntu对于我这种上上网,收收邮件,写写博客,写写程序的时实在是太合适了,除了刚接触的时候会不怎么完全适应命令行及各种权限管理, ...

  9. 简单音乐播放器html+css+基础vue+含源码,有搜索和播放mv功能,代码可直接复制用。

    题目:html+css+基础vue实现的简单音乐播放器(含源码),有搜索和播放mv功能,代码可直接复制用. 问题描述: 如果vue刚入门,掌握一些基础语法后就可以写一个简单的音乐播放器来练练手~~如果 ...

  10. ONNX MLIR应用示例(含源码链接)

    ONNX MLIR应用示例(含源码链接) 开放式神经网络交换在MLIR中的实现 (http://onnx.ai/onnx-mlir/). Prebuilt Containers 开始使用ONNX-ML ...

最新文章

  1. 优秀的博客与文章总结链接地址
  2. 【Sass】+【Compass】学习笔记
  3. Android控件系列之RadioButtonRadioGroup
  4. 阿里云主机CentOS添加硬盘
  5. 利用gensim在simulink中建立神经网络模型
  6. [转]苦逼男和女神之间的经典对话,亲身经历过的有木有啊,必须转。。。
  7. 手把手教你用Python实现人脸识别,辨别真假!
  8. python客观题阅卷_利用Python开发智能阅卷系统
  9. 最新 9个免费建站空间 网站均免备案
  10. Session 'app': Error Launching activity
  11. ctf中压缩包隐写经验总结
  12. java 图片 黑白_Java实现彩色图片转为黑白图片
  13. Hadoop之——重新格式化HDFS的方案
  14. sdcc man阅读笔记(四)——存储类型关键字
  15. 在js中调用dede标签
  16. 路灯问题 (贪心算法)
  17. javascript蜘蛛纸牌
  18. 客户端访问https时应无浏览器(含终端)安全警告信息;_Http升级Https(Let#x27;s Encrypt)...
  19. form表单提交且接口回调显示提交成功
  20. 解决为什么svn没有对号等符号的问题。

热门文章

  1. J-Link软件和文档包的版本发行说明(1)[V3.00d ~ V4.94j版本]
  2. python调用系统声音报警_python写报警程序中的声音实现win
  3. 计算机故障报警声2声,电脑开机报警声音2短4短是什么問題?
  4. tts高级编程 android,Android TTS(TextToSpeech) 使用
  5. 『常识』罗胖的《罗辑思维》中推荐的书 — 未校正
  6. 森林防火监控系统解决方案
  7. 手机坏点如何测试软件,怎么检测手机屏幕坏点
  8. 精伦210兼容谷歌_【精伦IDR210身份证阅读器兼容火狐和谷歌浏览器】 - 太平洋安防网...
  9. 音乐推荐系统协同过滤算法解释
  10. js如何实现扫描身份证识别_基于javascript实现根据身份证号码识别性别和年龄