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

QT表格控件实例(Table Widget 、Table View)

欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀

文章目录

  • 前言
  • 一、图示实例
  • 二、列表常用成员解析
  • 三、代码实例解析
    • UI设计如下
    • mainwindow.h
    • main.cpp
    • mainwindow.cpp
  • 四、 总结


前言

本节将会给大家带来QT表格的简单实例

一、图示实例

在这里插入图片描述

二、列表常用成员解析

1、设置行列
setRowCount(int rows) 设置行数
setColumnCount(int columns) 设置列数
setRowHeight(int row, int height) 设置指定行高
setColumnWidth(int column, int width) 设置指定列宽
2、设置表头
setHorizontalHeaderLabels(const QStringList &labels) 设置表格水平表头
setVerticalHeaderLabels(const QStringList &labels) 设置表格竖直表头
setStretchLastSection(bool stretch) 最后一列填满空间
setSectionResizeMode(ResizeMode mode) 设置大小模式
3、设置属性
setEditTriggers(EditTriggers triggers) 编辑设置
setSelectionBehavior(枚举) 选中行为
setSecetionMode(枚举) 选中模式
setFrameShape(Shape) 设置边框
setShowGrid(bool show) 是否显示网格

QAbstractItemView::NoEditTriggers 不可编辑
QAbstractItemView::DoubleClicked 双击开始编辑
QAbstractItemView::AnyKeyPressed 点击任意键开始编辑

QAbstractItemView::SelectItems 选择单元格
QAbstractItemView::SelectRows 选择整行
QAbstractItemView::SelectColumns 选择整列

QAbstractItemView::NoSelection 不可选中
QAbstractItemView::SingleSelection 选中单个项目

QFrame::NoFrame 无边框
QFrame::Box 设置外边框
QFrame::HLine 设置无边框水平线
QFrame::VLine 设置无边框垂直线

4、常用信号函数
cellClicked(int row,int column) 单元格(row,columun)被点击时触发信号,
cellDoubleClicked(int row,int column) 单元格(row,columun)被双击时触发信号
cellEntered(int row,int column) 单元格(row,columun)被按下时触发信号
cellChanged(int row, int column) 单元格(row,columun)数据改变时触发信号
itemClicked(QTableWidgetItem *item) 单元格item被点击时触发信号
itemDoubleClicked(QTableWidgetItem *item) 单元格item被双击时触发信号
itemEntered(QTableWidgetItem *item) 单元格item被按下时触发信号
itemChanged(QTableWidgetItem *item) 单元格item数据改变时触发信号

5、常用槽函数
clear() 删除表格所有内容,包括表头
clearContents() 删除单元格所有内容,保留表头
insertColumn(int column) 在表格第 column 列的位置插入一个空列
insertRow(int row) 在表格第 row 行的位置插入一个空行
removeColumn(int column) 删除表格的第 column 列,包括该列所有单元格
removeRow(int row) 删除表格的第 row 行,包括该行所有单元格

三、代码实例解析

UI设计如下

在这里插入图片描述

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();bool  Data;
private slots:void on_pushButton_clicked(); //纯代码实现TableWigetvoid on_pushButton_2_clicked(); //纯代码实现TableViewvoid showData();                //定时刷新数据private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStandardItemModel>
#include <QTableView>
#include <QTimer>
#include <QPixmap>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QPixmap picPixmap;         //QPixmap主要是用于绘图,针对屏幕显示而最佳化设计picPixmap.load("pika.jpg"); //插入图片QPixmap TempPixmap = picPixmap.scaled(ui->label_3->width(), ui->label_3->height(),Qt::KeepAspectRatio, Qt::SmoothTransformation);ui->label_3->setScaledContents(true);  //设置和Qlanel的大小保存一致ui->label_3->setPixmap(TempPixmap);    //输出到QlabelData = false;                             //用于控制数据刷新QTimer *timer=new QTimer (this);          //新建一个定时器对象connect (timer,SIGNAL(timeout()), this, SLOT(showData ())); //连接定时器的 timeout()信号与显示时间的槽函数 showData() 。timer->start (500);                      //以 1000 毫秒 (ms) 为周期启动定时器。}MainWindow::~MainWindow()
{delete ui;
}//纯代码实现TableWiget
void MainWindow::on_pushButton_clicked()
{/*************使用纯代码实现表tableWidget*************/QTableWidget *tableWidget = new QTableWidget(4,2); // 新构造了一个QTableWidget的对象,并且设置为4行,2列//    也可用下面的方法构造QTableWidget对象//    QTableWidget *tableWidget = new QTableWidget;//    tableWidget->setRowCount(4);     //设置行数为4//    tableWidget->setColumnCount(3);   //设置列数为3tableWidget->setWindowTitle("QTable 乔伊波伊");tableWidget->resize(500, 450);  //设置表格QStringList header;header<<"交通工具"<<"票价";tableWidget->setHorizontalHeaderLabels(header);tableWidget->setItem(0,0,new QTableWidgetItem("飞机"));tableWidget->setItem(1,0,new QTableWidgetItem("轮船"));tableWidget->setItem(2,0,new QTableWidgetItem("火车"));tableWidget->setItem(0,1,new QTableWidgetItem("2000"));tableWidget->setItem(1,1,new QTableWidgetItem("3000"));tableWidget->setItem(2,1,new QTableWidgetItem("500"));tableWidget->setFont(QFont("Microsoft YaHei UI Light",20));tableWidget->show();}
//纯代码实现TableView
void MainWindow::on_pushButton_2_clicked()
{/*************使用纯代码实现表tableView*************/QTableView  *widget=new QTableView();QStandardItemModel* model = new QStandardItemModel(this);model->setHorizontalHeaderItem(0,new QStandardItem("名字"));model->setHorizontalHeaderItem(1,new QStandardItem("关系"));model->setItem(0, 0, new QStandardItem("猫"));model->setItem(0, 1, new QStandardItem("老虎"));model->setItem(1, 0, new QStandardItem("老师"));model->setItem(1, 1, new QStandardItem("学生"));widget->setModel(model);widget->resize(500, 450);   //设置表格高,宽widget->setFont(QFont("Microsoft YaHei UI Light",20));widget->show();
}void MainWindow::showData()
{if(Data){/*******************使用UI控件TableWidget****************************/ui->tableWidget->setWindowTitle("QTable 乔伊波伊");ui->tableWidget->setRowCount(4);    //行数为4ui->tableWidget->setColumnCount(2);  //列数为2ui->tableWidget->resize(500, 450);   //设置表格500表示高,450表示宽QStringList header;header<<"产品"<<"价格";ui->tableWidget->setHorizontalHeaderLabels(header);ui->tableWidget->setHorizontalHeaderLabels(header);ui->tableWidget->setItem(0,0,new QTableWidgetItem("手机"));ui->tableWidget->setItem(1,0,new QTableWidgetItem("电脑"));ui->tableWidget->setItem(2,0,new QTableWidgetItem("平板"));ui->tableWidget->setItem(0,1,new QTableWidgetItem("100"));ui->tableWidget->setItem(1,1,new QTableWidgetItem("200"));ui->tableWidget->setItem(2,1,new QTableWidgetItem("300"));ui->tableWidget->setFont(QFont("Microsoft YaHei",16)); //设置字体,和大小ui->tableWidget->show();/*******************使用UI控件TableView****************************///QTableView  *widget=new QTableView();QStandardItemModel* model = new QStandardItemModel(this);model->setHorizontalHeaderItem(0,new QStandardItem("名字"));model->setHorizontalHeaderItem(1,new QStandardItem("关系"));model->setItem(0, 0, new QStandardItem("张三"));model->setItem(0, 1, new QStandardItem("李四"));ui->tableView->setFont(QFont("Microsoft YaHei",16));ui->tableView->resize(500, 450);   //设置表格高,宽ui->tableView->setModel(model);ui->tableView->show();Data = false;}else{/*******************使用UI控件TableWidget****************************/ui->tableWidget->setWindowTitle("QTable 乔伊波伊");ui->tableWidget->setRowCount(4);    //行数为4ui->tableWidget->setColumnCount(2);  //列数为2ui->tableWidget->resize(500, 450);   //设置表格QStringList header;header<<"产品"<<"价格";ui->tableWidget->setHorizontalHeaderLabels(header);ui->tableWidget->setHorizontalHeaderLabels(header);ui->tableWidget->setItem(0,0,new QTableWidgetItem("外套"));ui->tableWidget->setItem(1,0,new QTableWidgetItem("裤子"));ui->tableWidget->setItem(2,0,new QTableWidgetItem("鞋子"));ui->tableWidget->setItem(0,1,new QTableWidgetItem("400"));ui->tableWidget->setItem(1,1,new QTableWidgetItem("500"));ui->tableWidget->setItem(2,1,new QTableWidgetItem("600"));ui->tableWidget->setFont(QFont("宋体",25));ui->tableWidget->show();/*******************使用UI控件TableView****************************///QTableView  *widget=new QTableView();QStandardItemModel* model = new QStandardItemModel(this);model->setHorizontalHeaderItem(0,new QStandardItem("名字"));model->setHorizontalHeaderItem(1,new QStandardItem("关系"));model->setItem(0, 0, new QStandardItem("王二"));model->setItem(0, 1, new QStandardItem("麻子"));model->setItem(1, 0, new QStandardItem("老师"));model->setItem(1, 1, new QStandardItem("学生"));ui->tableView->setModel(model);ui->tableView->resize(500, 450);   //设置表格高,宽ui->tableView->setFont(QFont("宋体",25));ui->tableView->show();Data = true;}}

四、 总结

QT表格控件在处理数据方向上有着广泛的应用。

相关文章:

QT表格控件实例(Table Widget 、Table View)

欢迎小伙伴的点评✨✨&#xff0c;相互学习&#x1f680;&#x1f680;&#x1f680; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文章目录前言一、图示实例二、列…...

第二章Vue组件化编程

文章目录模块与组件、模块化与组件化模块组件模块化组件化Vue中的组件含义非单文件组件基本使用组件注意事项使用 kebab-case使用 PascalCase组件的嵌套模板templateVueComponent一个重要的内置功能单文件组件Vue脚手架使用Vue CLI脚手架先配置环境初始化脚手架分析脚手架结构实…...

面试官:vue2和vue3的区别有哪些

目录 多根节点&#xff0c;fragment&#xff08;碎片&#xff09; Composition API reactive 函数是用来创建响应式对象 Ref toRef toRefs 去除了管道 v-model的prop 和 event 默认名称会更改 vue2写法 Vue 3写法 vue3组件需要使用v-model时的写法 其他语法 1. 创…...

【TopK问题】——用堆实现

文章目录一、TopK问题是什么二、解决方法三、时间复杂度一、TopK问题是什么 TopK问题就是从1000个数中找出前K个最大的数或者最小的数这样的类似问题。 不过并不要求这k个数字必须是有序的&#xff0c;如果题目有要求&#xff0c;则进行堆排序即可。 还有比如求出全国玩韩信…...

【Spring从成神到升仙系列 四】从源码分析 Spring 事务的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…...

使用Nginx反向代理OpenAI API

由于OpenAI的API在国内无法访问&#xff0c;所以可以通过海外服务器利用Nginx实现反向代理。 安装Nginx 这一步就不赘述了&#xff0c;不同的Linux系统安装方式略有不同&#xff0c;根据自己的服务器的系统自行百度即可。 OpenSSL创建证书 因为OpenAI的接口是https协议的&a…...

USB键盘实现——字符串描述符(四)

字符串描述符 字符串描述符内容解析和 HID鼠标 一致。 获取字符串描述符请求 标准设备请求 typedef struct __attribute__ ((packed)){union {struct __attribute__ ((packed)) {uint8_t recipient : 5; ///< Recipient type usb_request_recipient_t.uint8_t type …...

STM32的中断

目录 一、STM32中断概述 二、外部中断控制器EXTI 三、按键中断 四、串口中断 一、STM32中断概述 处理器中的中断在处理器中&#xff0c;中断是一个过程&#xff0c;即CPU在正常执行程序的过程中&#xff0c;遇到外部/内部的紧急事件需要处理&#xff0c;暂时中止当前程序的…...

Flink进阶篇-CDC 原理、实践和优化采集到Doris中

简介 基于doris官方用doris构建实时仓库的思路&#xff0c;从flinkcdc到doris实时数仓的实践。 原文 Apache Flink X Apache Doris 构建极速易用的实时数仓架构 (qq.com) 前提-Flink CDC 原理、实践和优化 CDC 是什么 CDC 是变更数据捕获&#xff08;Change Data Captur…...

看完这篇 教你玩转渗透测试靶机vulnhub——My File Server: 1

Vulnhub靶机My File Server: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;FTP匿名登入&#xff1a;③&#xff1a;SMB共享服务&#xf…...

OpenHarmony实战STM32MP157开发板 “控制” Hi3861开发板 -- 中篇

一、前言 我们在 OpenHarmony实战STM32MP157开发板 “控制” Hi3861开发板 – 上篇 中介绍到了,App面板的开发,以及JS API接口的开发和调用。 那么本篇文章,会详解:BearPi-HM Nano开发板,如何实现数据上报和指令接收响应的。 看到这里,可能有同学可能已经知道思路了,因…...

【数据结构初阶】单链表

目录一、思路>>>>>>>>>>>>过程<<<<<<<<<<<<<<<1.打印2.尾插3.尾删4.头插5.头删6.查找7.指定位置后插入8.指定位置后删除9.链表的销毁二、整个程序1.SLTlist.c2.SLTlist.c一、思路 #define …...

多线程代码案例-阻塞队列

hi,大家好,今天为大家带来多线程案例--阻塞队列 这块知识点也很重要,要好好掌握呀~~~ &#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x…...

mysql的limit查询竟然有坑?

背景 最近项目联调的时候发现了分页查询的一个bug&#xff0c;分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。 .png) 那么问题来了&#xff0c;查询第一页和第二页的时候都出现了11,12,13的记录…...

【Docker】MAC电脑下的Docker操作

文章目录安装Docker部署mysql 一主一从登录ChatGPT搞方案本地创建一个文件夹编辑docker-compose.yml文件启动检查并编排容器验证基于command的my.cnf配置的加载主数据库建一个用户给子数据库用于主从复制启动主从同步安装Docker 官网地址 https://www.docker.com/ 下载安装 验…...

【Python3】matplotlib,模块,进/线程,文件/xml,百度人脸api,hal/aiohttp/curl

文章目录1.matplotlib/时间复杂度/线性表&#xff1a;顺序表要求存储空间必须连续2.python模块导入&#xff1a;python3 -c ‘import sys;print(sys.path)’ 显示导入模块时会去哪些路径下查找3.进/线程&#xff1a;进/线程是不能随便创建&#xff0c;就像每招一个员工是有代价…...

异或相关算法

文章目录1. 异或的性质2. 题目一3. 题目二4. 题目三5. 题目四1. 异或的性质 我们知道&#xff0c;异或的定义是&#xff1a;相同为0&#xff0c;相异为1。所以也被称为无进位相加&#xff0c;根据这定义&#xff0c;我们可以得出三个性质&#xff1a; 1. N ^ N0。2. N ^ 0N。3…...

python 使用pyshp读写shp文件

安装 pip install pyshp 引入 import shapefile读取 sfshapefile.Reader("{路径名}",encodingutf-8) # 仅仅读取 shapes与shape shapessf.shapes() 返回值是一个列表&#xff0c;包含该文件中所有的”几何数据”对象shapesf.shape(0) Shape是第1个”几何数据”…...

eNSP FTP基础配置实验

关于本实验在本实验中&#xff0c;我们通过两台路由器来展示通过FTP在两台路由器之间传输文件。其中一台路由器AR2作为FTP服务器&#xff0c;另一台路由器AR1以FTP的方式登录AR2&#xff0c;并对AR2的文件系统进行一些更改。实验目的熟悉华为网络设备文件系统的管理。掌握华为网…...

堆及其多种接口与堆排序的实现

我们本期来讲解堆结构 目录 堆的结构 堆的初始化 堆的销毁 堆的插入 向上调整算法 堆的删除 向下调整算法 取堆顶元素 判断堆是否为空 堆中元素个数 堆排序 向下调整与向上调整效率计算 Top-K问题 全部代码 堆的结构 堆是一种用数组模拟二叉树的结构 逻辑结构是…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

用 FFmpeg 实现 RTMP 推流直播

RTMP&#xff08;Real-Time Messaging Protocol&#xff09; 是直播行业中常用的传输协议。 一般来说&#xff0c;直播服务商会给你&#xff1a; ✅ 一个 RTMP 推流地址&#xff08;你推视频上去&#xff09; ✅ 一个 HLS 或 FLV 拉流地址&#xff08;观众观看用&#xff09;…...