【嵌入式——QT】QTableWidget

表格小部件为应用程序提供标准的表格显示功能。QTableWidget中的项由QTableWidgetItem提供。
如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。

常用函数

  • cellWidget(int row, int column) const:返回显示在给定行和列的单元格中的小部件;
  • closePersistentEditor(QTableWidgetItem *item):关闭item的持久编辑器;
  • column(const QTableWidgetItem *item) const:返回该项的列;
  • columnCount() const:返回列数;
  • currentColumn() const:返回当前项的列;
  • currentItem() const:返回当前项;
  • currentRow() const:返回当前行;
  • editItem(QTableWidgetItem *item):如果项目是可编辑的,则开始编辑它;
  • item(int row, int column) const:如果给定的行和列已经设置,则返回对应的项;否则返回nullptr;
  • itemAt(const QPoint &point) const:返回指向给定点上的项的指针,如果point没有被表部件中的项覆盖,则返回nullptr;
  • removeCellWidget(int row, int column):删除行和列指示的单元格上设置的小部件;
  • row(const QTableWidgetItem *item) const:返回该项的行;
  • rowCount() const:返回行数;
  • setColumnCount(int columns):设置列数;
  • setCurrentCell(int row, int column):将当前单元格设置为位置(行、列)处的单元格;
  • setCurrentItem(QTableWidgetItem *item):将当前项设置为项;
  • setHorizontalHeaderItem(int column, QTableWidgetItem *item):将“列”的水平标题项设置为“项”。如果有必要,列数会增加以适应项目。删除前一个首部项(如果有的话);
  • setHorizontalHeaderLabels(const QStringList &labels):使用labels设置水平标题标签;
  • setItem(int row, int column, QTableWidgetItem *item):将给定行和列的项设置为项;
  • setRowCount(int rows):将这个表的模型中的行数设置为rows;
  • setVerticalHeaderItem(int row, QTableWidgetItem *item):将行的垂直标题项设置为项;
  • setVerticalHeaderLabels(const QStringList &labels):使用labels设置垂直标题标签;
  • takeItem(int row, int column):从表中删除行和列的项,但不删除它;

信号

  • cellActivated(int row, int column):当按行和列指定的单元被激活时,发出此信号;
  • cellChanged(int row, int column):当由行和列指定的单元格中的项的数据发生更改时,就会发出此信号;
  • cellClicked(int row, int column):每当单击表格中的一个单元格时,就会发出这个信号。指定的行和列是单击的单元格;
  • cellDoubleClicked(int row, int column):每当双击表格中的一个单元格时,就会发出这个信号。指定的行和列是单击的单元格;
  • cellEntered(int row, int column):当鼠标光标进入一个单元格时,就会发出这个信号。单元格由行和列指定;
  • cellPressed(int row, int column):每当按下表格中的一个单元格时,就会发出这个信号。指定的行和列是按下的单元格;
  • void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn):每当当前单元格发生变化时,该信号就会发出。previousRow和previousColumn指定的单元格是之前获得焦点的单元格,currentRow和currentColumn指定的单元格是新的当前单元格;
  • currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous):每当当前元素发生变化时,就会发出这个信号。previous item是之前拥有焦点的项,current是新的当前项;
  • itemActivated(QTableWidgetItem *item):当指定的元素被激活时,就会发出这个信号;
  • itemChanged(QTableWidgetItem *item):每当item的数据发生变化时,就会发出这个信号;
  • itemClicked(QTableWidgetItem *item):每当单击表中的某个元素时,就会发出这个信号。指定的项目是被单击的项目;
  • itemDoubleClicked(QTableWidgetItem *item):每当双击表中的一个元素时,就会发出这个信号。指定的项是被双击的项;
  • itemEntered(QTableWidgetItem *item):当鼠标光标进入某个元素时,就会发出这个信号。项目就是输入的项目;
  • itemPressed(QTableWidgetItem *item):每当按下表中的一个元素时,就会发出这个信号。指定的项目是按下的项目;
  • itemSelectionChanged():每当选择发生变化时,就会发出这个信号;

槽函数

  • clear():删除视图中的所有项。这也将删除所有的选择和标题;
  • clearContents():从视图中删除所有不在标题中的项。这也将删除所有的选择。表的维度保持不变;
  • insertColumn(int column):在列处向表中插入一个空列;
  • insertRow(int row):在表的row处插入一个空行;
  • removeColumn(int column):从表中删除列及其所有项;
  • removeRow(int row):从表中删除行及其所有项;
  • scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible:如果需要,滚动视图以确保项目可见;

QTableWidgetItem
表项用于保存表小部件的信息片段。项目通常包含文本、图标或复选框
QTableWidgetItem类是一个方便类,它取代了Qt 3中的QTableItem类。它提供了一个与QTableWidget类一起使用的项。

QTableWidgetItem常用函数

  • background() const:返回用于渲染项目背景的画笔;
  • checkState() const:返回表项的已检状态;
  • column() const:返回表中项的列。如果某项不在表中,这个函数将返回-1;
  • data(int role) const:返回指定角色的项数据;
  • flags() const:返回用于描述项的标志。它们决定是否可以检查、编辑和选择项目;
  • font() const:返回用于渲染项目文本的字体;
  • isSelected() const:如果选中项,则返回true,否则返回false;
  • read(QDataStream &in):从流中读取项目;
  • write(QDataStream &out) const:将项写入流输出;
  • row() const:返回表中项目的行。如果某项不在表中,这个函数将返回-1;
  • setCheckState(Qt::CheckState state):将表项的检查状态设置为state;
  • setData(int role, const QVariant &value):为给定角色设置项的数据为指定的值;
  • setFlags(Qt::ItemFlags flags):将项的标志设置为给定的标志。它们决定了是否可以选择或修改项;
  • setText(const QString &text):将项的文本设置为指定的文本;
  • setTextAlignment(int alignment):将项目文本的文本对齐方式设置为指定的对齐方式;

图示
在这里插入图片描述

代码示例
QTableWidgetDialog.h

#ifndef QTABLEWIDGETDIALOG_H
#define QTABLEWIDGETDIALOG_H#include <QDialog>
#include <QLabel>
namespace Ui
{class QTableWidgetDialog;
}enum CellType {ctName = 1000, ctSex, ctBirth, ctNation, ctPartyM, ctScore};
enum FieldColNum {colName=0, colSex, colBirth, colNation, colScore, colPartyM};class QTableWidgetDialog : public QDialog
{Q_OBJECTpublic:explicit QTableWidgetDialog(QWidget* parent = nullptr);~QTableWidgetDialog();void init();void createItemARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score);
private slots:void on_pbSetHeader_clicked();void on_pbInit_clicked();void on_pbSetCountRow_clicked();void on_pbGetData_clicked();void on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);void on_pbInsertRow_clicked();void on_pbAddRow_clicked();void on_pbRemoveCurRow_clicked();void on_pbAutoRowh_clicked();void on_pbAutoColw_clicked();void on_checkBoxEdit_clicked(bool checked);void on_checkBoxRowHeader_clicked(bool checked);void on_checkBoxColHeader_clicked(bool checked);void on_checkBoxColor_clicked(bool checked);void on_radioButtonRow_clicked();void on_radioButtonItem_clicked();private:Ui::QTableWidgetDialog* ui;QLabel* labCellIndex;QLabel* labCellType;QLabel* labStudID;};#endif // QTABLEWIDGETDIALOG_H

QTableWidgetDialog.cpp

#include "QTableWidgetDialog.h"
#include "ui_QTableWidgetDialog.h"
#include <QDate>
#include <QIcon>
#include <QDebug>
QTableWidgetDialog::QTableWidgetDialog(QWidget* parent): QDialog(parent), ui(new Ui::QTableWidgetDialog)
{ui->setupUi(this);init();
}QTableWidgetDialog::~QTableWidgetDialog()
{delete ui;
}void QTableWidgetDialog::init()
{ui->spinBoxCount->setMaximum(10000);
}void QTableWidgetDialog::on_pbSetHeader_clicked()
{QTableWidgetItem* headerItem;QStringList headerText;headerText<<"姓名"<<"性别"<<"出生日期"<<"民族"<<"分数"<<"是否党员";ui->tableWidget->setColumnCount(headerText.count());ui->tableWidget->horizontalHeader()->setMinimumHeight(50);for(int i=0; i<ui->tableWidget->columnCount(); i++) {headerItem = new QTableWidgetItem(headerText.at(i));QFont font = headerItem->font();font.setBold(true);font.setPointSize(12);headerItem->setTextColor(Qt::red);//设置单元格显示字体headerItem->setFont(font);ui->tableWidget->setHorizontalHeaderItem(i, headerItem);}
}void QTableWidgetDialog::on_pbInit_clicked()
{QString strName, strSex;bool isParty = false;QDate birth;birth.setDate(1995, 1, 1);//清除表格数据区数据 但是不清除表头ui->tableWidget->clearContents();//返回数据区行数int rows = ui->tableWidget->rowCount();for(int i=0; i<rows; i++) {strName = QString::asprintf("学生%d", i);if((i % 2)==0) {strSex = "man";} else {strSex = "woman";}createItemARow(i, strName, strSex, birth, "汉族", isParty, 70);birth=birth.addDays(20);isParty = !isParty;}
}void  QTableWidgetDialog::createItemARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score)
{QTableWidgetItem* item;QString str;uint studID = 201605000;item = new QTableWidgetItem(name, ctName);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//设置单元格前景色// item->setForeground(Qt::darkGray);//设置一个图标// item->setIcon();//设置属性标记// item->setFlags(Qt::ItemIsSelectable);studID+=rowNo;item->setData(Qt::UserRole, QVariant(studID));ui->tableWidget->setItem(rowNo, colName, item);item = new QTableWidgetItem(sex, ctSex);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colSex, item);str = birth.toString("yyyy-MM-dd");item = new QTableWidgetItem(str, ctBirth);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colBirth, item);item = new QTableWidgetItem(nation, ctNation);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colNation, item);str.setNum(score);item = new QTableWidgetItem(str, ctScore);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colScore, item);item = new QTableWidgetItem("党员", ctPartyM);if(isPm) {//设置单元格勾选状态item->setCheckState(Qt::Checked);} else {item->setCheckState(Qt::Unchecked);}// //设置单元格背景颜色item->setBackground(Qt::yellow);item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colPartyM, item);
}void QTableWidgetDialog::on_pbSetCountRow_clicked()
{ui->tableWidget->setRowCount(ui->spinBoxCount->text().toInt());
}void QTableWidgetDialog::on_pbGetData_clicked()
{QString str;QTableWidgetItem* cellItem;ui->textEdit->clear();for(int i=0; i<ui->tableWidget->rowCount(); i++) {str = QString::asprintf("%d ", i+1);for(int j=0; j<ui->tableWidget->columnCount()-1; j++) {cellItem = ui->tableWidget->item(i, j);str = str+cellItem->text() + " ";}cellItem = ui->tableWidget->item(i, colPartyM);if(cellItem->checkState()==Qt::Checked) {str = str+tr("partyM");} else {str = str+tr("general");}ui->textEdit->append(str);}
}//单元格切换 触发该信号
void QTableWidgetDialog::on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{QTableWidgetItem* curItem =ui->tableWidget->item(currentRow, currentColumn);if(curItem == NULL) {return;}QString curstr = QString::asprintf("currentRow currentColumn :%d ,%d", currentRow, currentColumn);QString prestr = QString::asprintf("previousRow previousColumn :%d,%d", previousRow, previousColumn);qDebug()<<"curstr"<<curstr<<"prestr"<<prestr;
}//插入
void QTableWidgetDialog::on_pbInsertRow_clicked()
{int curRow = ui->tableWidget->currentRow();ui->tableWidget->insertRow(curRow);createItemARow(curRow, "stu2", "man", QDate::fromString("1996-1-1", "yyyy-M-d"), "满族", false, 66);
}void QTableWidgetDialog::on_pbAddRow_clicked()
{int rowCounts = ui->tableWidget->rowCount();ui->tableWidget->insertRow(rowCounts);createItemARow(rowCounts, "stu1", "man", QDate::fromString("1996-1-1", "yyyy-M-d"), "满族", false, 55);
}void QTableWidgetDialog::on_pbRemoveCurRow_clicked()
{int curRow = ui->tableWidget->currentRow();ui->tableWidget->removeRow(curRow);
}void QTableWidgetDialog::on_pbAutoRowh_clicked()
{ui->tableWidget->resizeRowsToContents();
}void QTableWidgetDialog::on_pbAutoColw_clicked()
{ui->tableWidget->resizeColumnsToContents();
}void QTableWidgetDialog::on_checkBoxEdit_clicked(bool checked)
{if(checked) {//双击或者获取焦点后单击进入编辑状态ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);} else {ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);}
}void QTableWidgetDialog::on_checkBoxRowHeader_clicked(bool checked)
{ui->tableWidget->horizontalHeader()->setVisible(checked);
}void QTableWidgetDialog::on_checkBoxColHeader_clicked(bool checked)
{ui->tableWidget->verticalHeader()->setVisible(checked);
}void QTableWidgetDialog::on_checkBoxColor_clicked(bool checked)
{ui->tableWidget->setAlternatingRowColors(checked);
}void QTableWidgetDialog::on_radioButtonRow_clicked()
{ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
}void QTableWidgetDialog::on_radioButtonItem_clicked()
{ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?

【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么&#xff1f;有什么关系吗&#xff1f; 文章目录 写在前面解答补充说明 写在前面 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&…

论文研读_多目标部署优化:无人机在能源高效无线覆盖中的应用(ImMOGWO)精简版

此篇文章为Multi-objective Deployment Optimization of UAVs for Energy-Efficient Wireless Coverage的论文学习笔记&#xff0c;只供学习使用&#xff0c;不作商业用途&#xff0c;侵权删除。并且本人学术功底有限如果有思路不正确的地方欢迎批评指正! 创新点 RD算法 混合…

第十三届蓝桥杯嵌入式省赛程序设计详细题解

第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单&#xff0c;没有那么多串口的数据处理以及判断&#xff01; 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中&#xff0c;我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LC…

【HTML】HTML基础7.3(自定义列表)

目录 标签 效果 代码 注意 标签 <dl> <dt>自定义标题</dt><dd>内容1</dd><dd>内容2</dd><dd>内容3</dd> 。。。。。。 </dl> 效果 代码 <dl><dt>蜘蛛侠系列</dt><dd>蜘蛛侠1</dd…

LSTM实战:基于PyTorch的新冠疫情确诊人数预测

目录 引言 一、探索数据集 1、导入相关库文件 2、导入每日确诊人数数据集 3、清洗每日确诊人数数据集 4、每日累计确诊的人数及其数据集可视化 5、每日撤消累计后的确诊人数及其数据集可视化 6、查看总共有多少数据量 二、数据预处理 1、训练和测试数据集 2、数据放…

STM32用标准库做定时器定时1秒更新OLED的计数值(Proteus仿真)

首先新建proteus工程&#xff0c;绘制电路图&#xff1a; 然后赋值我之前文章中提到的文件夹OLED屏幕显示&#xff1a;&#xff08;没有的自己去那篇文章下载去&#xff09; 然后进入文件夹&#xff1a; 新建两个文件在Mycode文件夹中&#xff1a; 文件关系如下&#xff1a; 新…

CogCaliperTool卡尺工具

CogCaliperTool(卡尺工具) CogCaliperTool&#xff08;卡尺工具&#xff09;是一种用于测量直线特征的工具。该工具通常用于检测图像中的边缘、轮廓或其他直线特征&#xff0c;并提供精确的测量数据&#xff0c;如长度、角度和位置信息。 比如说我们需要测量下图工具的边缘对…

【深度学习笔记】计算机视觉——FCN(全卷积网络

全卷积网络 sec_fcn 如 :numref:sec_semantic_segmentation中所介绍的那样&#xff0c;语义分割是对图像中的每个像素分类。 全卷积网络&#xff08;fully convolutional network&#xff0c;FCN&#xff09;采用卷积神经网络实现了从图像像素到像素类别的变换 :cite:Long.Sh…

校招中的“熟悉linux操作系统”一般是指达到什么程度?

校招中的“熟悉linux操作系统”一般是指达到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&am…

归并排序总结

1.归并排序 归并排序的步骤如下&#xff1a; ①枚举中点&#xff0c;将区间分为左右两段&#xff1b; ②对左右两段区间分别排序&#xff1b; 这个过程以递归的方式进行。 ③合并两段区间。 是一个模拟的过程。用两个指针分别指向左右区间&#xff0c;判断当前哪个数小&…

基于机器学习的垃圾分类

1绪论 1.1问题背景 垃圾分类有减少环境污染、节省土地资源、再生资源的利用、提高民众价值观念等的好处&#xff0c;在倡导绿色生活&#xff0c;注重环境保护的今天&#xff0c;正确的垃圾分类和处理对我们的生态环境显得尤为重要。 在国外很多国家&#xff0c;经过了几十年…

VTK的编译和部署,配合c++和visual studio2022,VTK开发环境的配置

1.下载 在官网选择最新的版本 Download | VTK 下载之后进行解压&#xff0c;然后再里面创建build目录&#xff0c;方便后面使用cmake进行编译 2.对源码进行编译 打卡Cmake&#xff0c;如图操作 可以看到点击configure之后&#xff0c;cmake对我们的代码在进行处理 处理完成之…

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(二)

学习后端CRUD操作 书接上文&#xff0c;我们学习了前后端分离项目的基础环境配置和用户管理模块的前后端基础搭建&#xff0c;以下链接是上一节教程内容详细步骤&#xff0c;友友们可以跟着步骤实操。本节课程我们在前面项目的基础上接着学习后端CRUD操作&#xff0c;真正打通数…

阿里云一键登录(号码认证服务)

前言 用户登录原来的登录方式如下 1. 手机号验证码 2. 账号密码 运营觉得操作过于复杂, 因此想引入阿里自动登录的逻辑, 也就是号码认证服务,所以才有了这篇问文章 注: 本文只是记录Java端的实现, app端的请自行查询文档实现 官方资料 文档 : 什么是号码认证服务_号码认证服务(…

SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展

场景 在业务开发中&#xff0c;经常遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 使用策略和模板模式的结合可以解决这个问题&#xff0c;但是使用编码的方式会使得文件太多, 在业务的部分环节可以这样操作&#xff0c;在项目角度就无法一眼洞…

【洛谷 P9240】[蓝桥杯 2023 省 B] 冶炼金属 题解(二分答案)

[蓝桥杯 2023 省 B] 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V&#xff0c; V V V 是一个正整数&#xff0c;这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff0c;当普…

产业园区如何实现数字化运营管理?

​在数字化浪潮席卷全球的今天&#xff0c;产业园区正经历着前所未有的变革&#xff0c;数字化运营管理成为各个园区转型升级的发力方向&#xff0c;它不仅能够提升园区的运营管理效率&#xff0c;还能够帮助园区提高服务效能、实现精准招商、增强决策效率&#xff0c;从而全面…

Redis实战—商户查询缓存

本博客为个人学习笔记&#xff0c;学习网站&#xff1a;黑马程序员Redis入门到实战 实战篇之商户查询缓存 目录 什么是缓存 添加Redis缓存 缓存更新策略 数据库缓存不一致解决方案 案例&#xff1a;给查询商铺的缓存添加超时剔除和主动更新策略 缓存穿透 案例&#xff1…

奇富科技:大数据任务从诊断到自愈的实践之路

一、为什么要做诊断引擎 毓数平台是奇富科技公司自主研发的一站式大数据管理、开发、分析平台&#xff0c;覆盖大数据资产管理、数据开发及任务调度、自助分析及可视化、统一指标管理等多个数据生命周期流程&#xff0c;让用户使用数据的同时&#xff0c;挖掘数据最大的价值。…

打造高效、安全的交易平台:开发流程与关键要素解析

在数字化时代&#xff0c;大宗商品交易平台开发/搭建已成为连接买家与卖家的桥梁&#xff0c;为无数企业和个人提供了便捷、高效的交易机会。然而&#xff0c;随着市场的竞争日益激烈&#xff0c;如何打造一个既符合用户需求又具备竞争力的交易平台&#xff0c;成为了众多开发者…