QT QTableView(基于QStandardItemModel用法)操作详解

article/2025/10/23 5:40:28

文章目录

    • 前言
    • 关于QStandardItemModel
    • 上下翻页实例代码讲解

前言

前面详细介绍过QTableWidget的用法,今天想一次性把QTable系列写完,也就是QTabelview的使用,我发现使用QTableWidget如果频繁的clean,然后又set,会很卡,哪怕你只是每次set10个数据,都会有1到2秒的卡顿,所以我又转到了QTabelview的使用,看看是否也是一样,本次使用的model并不是自定义继承QAbstractItemModel,然后实现一些必要的虚函数,如果想这要操作的额可以看我这篇博客QML 中使用 QAbstractListModel 作为 ListView 的 model 实例 2, 所以本次使用了QStandardItemModel作为数据模型来实现了对TableView初始化,以及对应的增删改查功能。

关于QStandardItemModel

QStandardItemModel 是标准的以项数据(item data)为基础的标准数据模型类,通常与 QTableView 组合成 Model/View 结构,实现通用的二维数据的管理功能。

本节介绍 QStandardltemModel 的使用,主要用到以下 3 个类:

  1. QStandardItemModel:基于项数据的标准数据模型,可以处理二维数据。维护一个二维的项数据数组,每个项是一个 QStandardltem 类的变量,用于存储项的数据、字体格式、对齐方式等。
  2. QTableView:二维数据表视图组件,有多个行和多个列,每个基本显示单元是一个单元格,通过 setModel() 函数设置一个 QStandardItemModel 类的数据模型之后,一个单元格显示 QStandardItemModel 数据模型中的一个项。
  3. QItemSelectionModel:一个用于跟踪视图组件的单元格选择状态的类,当在 QTableView 选择某个单元格,或多个单元格时,通过 QItemSelectionModel 可以获得选中的单元格的模型索引,为单元格的选择操作提供方便。

这几个类之间的关系是:QTableView 是界面视图组件,其关联的数据模型是 QStandardItemModel,关联的项选择模型是 QItemSelectionModelQStandardItemModel 的数据管理的基本单元是 QStandardItem

先看效果图:
在这里插入图片描述

上下翻页实例代码讲解

首先新建一个工程,主要功能就是上下翻页,每页显示10条数据,看看每次换页的速度会停留多久!

.h实现代码如下:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QStandardItemModel>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();//每行数据显示struct Data{QString name;  //名称QString age;     //年纪QString score;  //分数};private slots://上一页void on_pushButton_previousPage_clicked();//下一页void on_pushButton_nextPage_clicked();private://更新tabelview数据void updateTableData();private:Ui::Widget *ui;QStandardItemModel * m_standard_data_model; //数据模型QList<Data> m_data_list; //装载数据int m_cur_page = 0;  //当前页int m_max_page_num = 10; //一页最大数量,也就是行数
};
#endif // WIDGET_H

这里定义了数据模型变量 m_standard_data_model, 一页显示的最大数量m_max_page_num以及 当前页变量m_cur_page

.cpp实现代码:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);m_standard_data_model= new QStandardItemModel(this);/* 设置表格标题行(输入数据为QStringList类型) */m_standard_data_model->setHorizontalHeaderLabels(QStringList()<<"序列号"<<"姓名"<<"年龄"<<"分数");//不可编辑ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置modelui->tableView->setModel(m_standard_data_model);/* 自适应所有列,让它布满空间 */ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//去掉自动序号列ui->tableView->verticalHeader()->setHidden(true);for(int i = 0; i < 38; i++){Data data;data.age = "年龄:"+QString::number(i*2);data.name = "姓名"+QString::number(i);data.score = QString::number(i+1);m_data_list.append(data);}updateTableData();}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_previousPage_clicked()
{if(m_cur_page >= 1){m_cur_page--;updateTableData();ui->pushButton_nextPage->setEnabled(true);if(m_cur_page <= 0){ui->pushButton_previousPage->setEnabled(false);}}else{ui->pushButton_previousPage->setEnabled(false);}
}void Widget::on_pushButton_nextPage_clicked()
{if(m_cur_page*m_max_page_num < m_data_list.size()){m_cur_page++;updateTableData();ui->pushButton_previousPage->setEnabled(true);if(m_cur_page >= m_data_list.size()){ui->pushButton_nextPage->setEnabled(false);}}else{ui->pushButton_nextPage->setEnabled(false);}
}void Widget::updateTableData()
{qInfo()<<" m_cur_page = "<<m_cur_page;bool isok =  m_standard_data_model->removeRows(0 , m_max_page_num);//    for(int i = 0; i < m_max_page_num; i++)//    {//        m_standard_data_model->removeRow(i);//    }int row_index = 0;qInfo()<<" updateTableData isok = "<< isok;for(int i_row = m_cur_page * m_max_page_num; i_row <  (m_cur_page+1) * m_max_page_num; i_row++){if(m_data_list.size() > i_row){//序列号QStandardItem * index_item = new QStandardItem(QString::number(i_row+1));//姓名QStandardItem * name_item = new QStandardItem(m_data_list.at(i_row).name);//年龄QStandardItem * age_item = new QStandardItem(m_data_list.at(i_row).age);//分数QStandardItem * score_item = new QStandardItem(m_data_list.at(i_row).score);m_standard_data_model->setItem(row_index, 0, index_item);m_standard_data_model->setItem(row_index, 1, name_item);m_standard_data_model->setItem(row_index, 2, age_item);m_standard_data_model->setItem(row_index, 3, score_item);row_index++;}}
}

经过我的测试发现使用 QTableViewQTableWidget 要流畅太多,所以能使用QTableview就尽量使用吧


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

相关文章

Qt QTableView样式设置

Qt QTableView样式设置 显示效果 QSS设置 选中设置&#xff1a; 1 2 3 4 5 QTableView::item:selected { background:rgb(0,0,100); color:white; } 表头设置&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 QHeaderView::section:first { b…

Qt QTableView详解

一.常用接口 1.设置model&#xff0c;添加model数据 model new QStandardItemModel(this);model->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");QStandardItem *item00 new QStandardItem("…

QTableView常用设置

QTableView的设置比较复杂&#xff0c;做项目的时候总是搞忘&#xff0c;以本文记录一下它的样式、布局等设置方式。 目录 1、设置item布局1.1、平均铺满1.2、最后一项铺满 2、交替背景色2.1、行交替2.2、项交替 3、去掉选中虚线4、去掉网格线5、设置选中方式5.1、选中单个项目…

qt中Qtableview的用法

QTableView常用于实现数据的表格显示。下面我们如何按步骤实现学生信息表格&#xff1a; 一 添加表头 //准备数据模型 QStandardItemModel *student_model new QStandardItemModel(); student_model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr(&…

Qt深入浅出(十五)QTableView

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

Qt QTableView

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

QT QtableView操作详解

本文实现了使用QtableView控件来显示数据&#xff0c;数据源使用txt文本作为数据源&#xff0c;使用了QStandardItemModel作为数据模型来实现了对TableView空间的初始化&#xff0c;和对txt数据源的增删改查功能。 QT QtableView操作详解目录 1. 项目结构&软件界面 2. m…

QTableView使用方法小结

本文总结了QTableView常用方法&#xff0c;包括常规的数据显示、表头设置、字体和颜色设置、行列的高宽&#xff0c;显示格式设置等&#xff0c;还有一套分页算法&#xff0c;在QTableView表格里插入QLineEdit、QPushButton、QCheckBox等控件&#xff0c;常用的qss设置&#xf…

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

文章目录 一、QTableView操作示例图二、QTableView&#xff08;个人理解&#xff09;三、源码CMainWindow.hCMainWindow.cpp 四、拓展&#xff1a;代理的使用总结相关文章 一、QTableView操作示例图 下图为QTableView简单使用示例图&#xff0c;其中包含设置、获取、新建item等…

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导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条…