当前位置: 首页 > news >正文

QTableView 简单使用(笔记)

示例:QTableView + QStandardItemModel

QTableView无法直接在ui设计师界面进行数据添加

在使用QTableView时 必须完成的是创建一个model(模型)

这里使用QStandardItemModel

把设置好的表头headers 设置到model里

随后再对数据进行填充,数据填充可以动态进行(如:添加、删除等)

mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void initTabelView();//初始化QTableView void initModel();//初始化Model private: Ui::MainWindow *ui; QStandardItemModel *model_=nullptr; //先声明指针 }; #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); initModel(); initTabelView(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initTabelView() { ui->tableView->setModel(model_); } void MainWindow::initModel() { model_ = new QStandardItemModel();//初始化model_指针 // 设置表头 QStringList headers = {"姓名", "年龄", "城市", "成绩"}; model_->setHorizontalHeaderLabels(headers);//把表头设置到mdoel_中 // 填充数据 这部分可以动态添加 model_->setItem(0, 0, new QStandardItem("张三"));//第0行第0列 model_->setItem(0, 1, new QStandardItem("25"));//第0行第1列 model_->setItem(0, 2, new QStandardItem("北京"));//第0行第2列 model_->setItem(0, 3, new QStandardItem("85"));//第0行第3列 model_->setItem(1, 0, new QStandardItem("李四"));//同上 model_->setItem(1, 1, new QStandardItem("28")); model_->setItem(1, 2, new QStandardItem("上海")); model_->setItem(1, 3, new QStandardItem("92")); model_->setItem(2, 0, new QStandardItem("王五")); model_->setItem(2, 1, new QStandardItem("22")); model_->setItem(2, 2, new QStandardItem("广州")); model_->setItem(2, 3, new QStandardItem("78")); // 获取水平表头 QHeaderView *header = ui->tableView->horizontalHeader(); // 默认:所有列等宽拉伸 header->setSectionResizeMode(QHeaderView::Stretch); }

运行结果:

上面的写法 是直接固定了数据内容 无法进行添加删除

下面是动态添加的示例 (请帅小美认真看看到底在做什么 不要直接抄)

首先添加两个按钮 (添加)、(删除)

添加两个槽函数 (还要连接信号与槽 这里就不写出来了)

void MainWindow::addItem() { int index = model_->rowCount(); model_->setItem(index, 0, new QStandardItem("张三")); model_->setItem(index, 1, new QStandardItem("25")); model_->setItem(index, 2, new QStandardItem("北京")); model_->setItem(index, 3, new QStandardItem("85")); } void MainWindow::deleteItem() { QModelIndexList selected = ui->tableView->selectionModel()->selectedRows(); if (selected.isEmpty()) { return; } // 从后往前删除,避免索引错乱 for (int i = selected.size() - 1; i >= 0; i--) { model_->removeRow(selected[i].row()); } }

运行:

20260528_160624

如果希望QTableView中的控件 可以实现某些功能可以按下面的方法

下面展示的是

对添加的 第一列控件完成编辑后 打印信息

22222

修改addItem 函数

其中 必须在model_里设置item 否则 在ui->tableview->setIndexWidget中

model_->index(index,0)会索引为空 导致没办法把lineedit设置进去

void MainWindow::addItem() { int index = model_->rowCount(); model_->setItem(index, 0, new QStandardItem("000"));//这一行必须写 为什么 model_->setItem(index, 1, new QStandardItem("25"));//因为下面model_->index(index,0) model_->setItem(index, 2, new QStandardItem("北京"));//会索引model_ 如果一开始没有setItem model_->setItem(index, 3, new QStandardItem("85"));//那么这个索引会为空 下面等于没有写 QLineEdit *lineedit = new QLineEdit(); lineedit->setText("帅小美"); connect(lineedit,&QLineEdit::editingFinished,[=](){ qDebug()<<"1111111"; }); ui->tableView->setIndexWidget(model_->index(index,0),lineedit);//这里 }
http://www.zskr.cn/news/1425172.html

相关文章:

  • 别再为投稿PDF乱码发愁了!Pattern Recognition Letters投稿文件类型选择全解析
  • 从《原神》血条到VR菜单:拆解Unity Canvas三种渲染模式在真实项目里的应用
  • 别再硬编码了!SAP MB51报表增强的优雅解法:利用隐式增强与自定义表动态扩展ALV
  • 从‘感觉’到‘算法’:智能家居中的模糊控制实战(以空调温控为例)
  • Unity 2020.3 实战:从零到一打造你的第一个记忆翻牌游戏(附完整源码)
  • Jetson Orin Nano 修复 JetPack MISSING 与 OpenCV CUDA
  • UE5 GAS实战:手把手教你为RPG角色创建生命值与法力值AttributeSet(含网络同步与预测配置)
  • 防锈后生锈原因 工序间防锈 操作偏差 过程管控
  • TypeScript 编程中的模块系统:ESM 与 CommonJS 互操作
  • 别再死记硬背了!用“3-8译码器”和“数据选择器”的例子,彻底搞懂CPU地址总线和存储寻址
  • 178软文网:全流程软文营销推广服务对企业品牌运营的价值提升
  • 【文字三国志:第四篇】天命重构,后端 API 设计文档
  • 别再纠结驱动了!Java直连网络打印机(IP+端口9100)打印PDF保姆级教程
  • 游戏开发实战:用SAT算法搞定Unity/Unreal中复杂3D模型的碰撞检测(附C++/C#代码)
  • TVA 对 CV 的代际超越逻辑(10)
  • 手把手教你逆向拼多多H5/Temu的anti_content参数(附完整JavaScript代码)
  • 告别复杂参数!用Fooocus的‘Style’和‘Negative Prompt’快速生成高质量AI图片
  • UE5.1+ControlRig避坑实录:从创建控制器到驱动骨骼,新手最常遇到的3个报错及解决方法
  • 从依赖报错到完美汉化:在Ubuntu 20.04/22.04上安装配置Beyond Compare 4的完整避坑记录
  • 用Python+遗传算法搞定物流配送路线规划:一个外卖小哥的实战代码分享
  • 2026年4月加注装置品牌找哪家,移动式加油站/LNG撬装加气装置/撬装加油装置/船舶甲醇燃料加注站,加注装置厂家选哪家 - 品牌推荐师
  • 用STM32CubeMx和DMA搞定WS2812B灯带:从单灯测试到彩虹流水灯实战(附完整代码)
  • 告别蓝屏!手把手教你给NVMe固态硬盘装Win7(附驱动整合U盘制作)
  • 从FPU到SSE:x86汇编浮点计算演进与性能调优浅谈
  • 告别护眼APP:手把手教你为Android系统(AOSP 11)添加原生全局色温调节功能
  • 从Demo到集成:手把手教你用Vue项目测试OnlyOffice 7.4破解后的协作编辑功能
  • ESP32-C3安全启动与Flash加密实战:绕过自动重启,一步到位配置Secure Boot V2
  • ESP32-C3的Secure Boot与Flash加密避坑指南:从menuconfig配置到efuse烧录的完整排错记录
  • 华为海思HI3798MV310芯片盒子刷机避坑指南:TTL接线、HiTool设置与固件选择
  • Windows 10/11 也能有 Mac 的丝滑体验?手把手教你用 MyDockFinder 打造高颜值桌面(附运行库避坑指南)