QTableWidget的使用

使用QTableWidget,初始化数据、设置列头及格式,设置行数,设置每个单元格的编辑,间隔行底色变换、行选择 ,模式,单元格选择模式、插入行 、追加行、删除行,单元格加图标,单元格显示checkbox并设置是否可编辑,自动调节行高、列宽,显示/隐藏  水平表头、垂直表头

.h文件

#ifndef TABLEWIDGETEXAMPLE_H
#define TABLEWIDGETEXAMPLE_H#include <QMainWindow>
#include <QLabel>namespace Ui {
class TableWidgetExample;
}class TableWidgetExample : public QMainWindow
{Q_OBJECTprivate:enum CellType{ctName=1000,ctSex,ctBirth,ctNation,ctPartyM,ctScore};//单元格类型 枚举enum FieldColNum{colName=0,colSex,colBirth,colNation,colScore,colPartyM};//列号QLabel *labCellIndex;QLabel *labCellType;QLabel *labStudID;void createItemsARow(int rowNo,QString name,QString sex,QDate birth,QString nation,bool isPM,int score);public:explicit TableWidgetExample(QWidget *parent = nullptr);~TableWidgetExample();private slots:void on_btnSetHeader_clicked();void on_btnSetRows_clicked();void on_btnIniData_clicked();void on_btnInsertRow_clicked();void on_btnAppendRow_clicked();void on_btnDelCurRow_clicked();void on_btnAutoHeight_clicked();void on_btnAutoWidth_clicked();void on_btnReadToEdit_clicked();void on_chkBoxTabEditable_clicked(bool checked);void on_chkBoxRowColor_clicked(bool checked);void on_chkBoxHeaderH_clicked(bool checked);void on_chkBoxHeaderV_clicked(bool checked);void on_rBtnSelectRow_clicked();void on_rBtnSelectItem_clicked();void on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);private:Ui::TableWidgetExample *ui;
};#endif // TABLEWIDGETEXAMPLE_H

.cpp

#include "tablewidgetexample.h"
#include "ui_tablewidgetexample.h"#include <QDate>
#include <QTableWidgetItem>
#include <QRandomGenerator>//給制定行号单元格 根据字段内容填充
void TableWidgetExample::createItemsARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPM, int score)
{uint studID = 202105000;//学号前缀//姓名QTableWidgetItem *item = new QTableWidgetItem(name,TableWidgetExample::ctName);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);studID+=rowNo;item->setData(Qt::UserRole,QVariant(studID));ui->tableInfo->setItem(rowNo,TableWidgetExample::colName,item);//性别//://images/boy.icoQIcon icon;if(sex=="男")icon.addFile("://images/boy.ico");elseicon.addFile("://images/girl.ico");item = new QTableWidgetItem(sex,TableWidgetExample::ctSex);item->setIcon(icon);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);Qt::ItemFlags flags =Qt::ItemIsSelectable|Qt::ItemIsEnabled;item->setFlags(flags);ui->tableInfo->setItem(rowNo,TableWidgetExample::colSex,item);//出生日期QString str = birth.toString("yyyy-MM-dd");item = new QTableWidgetItem(str,TableWidgetExample::ctBirth);item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);ui->tableInfo->setItem(rowNo,TableWidgetExample::colBirth,item);//民族item= new QTableWidgetItem(nation,TableWidgetExample::ctNation);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableInfo->setItem(rowNo,TableWidgetExample::colNation,item);//是否党员item = new QTableWidgetItem("党员",TableWidgetExample::ctPartyM);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);flags =Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled;item->setFlags(flags);if(isPM)item->setCheckState(Qt::Checked);elseitem->setCheckState(Qt::Unchecked);item->setBackground(QBrush(Qt::yellow));//设置背景色ui->tableInfo->setItem(rowNo,TableWidgetExample::colPartyM,item);//分数str.setNum(score);item = new QTableWidgetItem(str,TableWidgetExample::ctScore);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableInfo->setItem(rowNo,TableWidgetExample::colScore,item);
}
TableWidgetExample::TableWidgetExample(QWidget *parent): QMainWindow(parent), ui(new Ui::TableWidgetExample)
{ui->setupUi(this);setCentralWidget(ui->mainSplitter);labCellIndex = new QLabel("当前单元格坐标",this);labCellIndex->setMinimumWidth(250);labCellType= new QLabel("当前单元格类型",this);labCellType->setMinimumWidth(200);labStudID= new QLabel("学生ID:",this);labStudID->setMinimumWidth(200);ui->statusbar->addWidget(labCellIndex);ui->statusbar->addWidget(labCellType);ui->statusbar->addWidget(labStudID);ui->tableInfo->setAlternatingRowColors(ui->chkBoxRowColor->isChecked());
}TableWidgetExample::~TableWidgetExample()
{delete ui;
}void TableWidgetExample::on_btnSetHeader_clicked()
{QStringList headerText;headerText<<"姓名"<<"性别"<<"出生日期"<<"民族"<<"分数"<<"是否党员";ui->tableInfo->setColumnCount(headerText.size());for(int i=0;i<ui->tableInfo->columnCount();i++){QTableWidgetItem *headerItem = new QTableWidgetItem(headerText.at(i));QFont font = headerItem->font();font.setBold(true);font.setPointSize(11);headerItem->setForeground(QBrush(Qt::red));headerItem->setFont(font);ui->tableInfo->setHorizontalHeaderItem(i,headerItem);}
}void TableWidgetExample::on_btnSetRows_clicked()
{ui->tableInfo->setRowCount(ui->spinRowCount->value());ui->tableInfo->setAlternatingRowColors(ui->chkBoxRowColor->isChecked());
}void TableWidgetExample::on_btnIniData_clicked()
{QDate birth(2001,5,1);ui->tableInfo->clearContents();for(int i=0;i<ui->tableInfo->rowCount();i++){QString strName =QString("学生%1").arg(i);QString sex = ((i%2)==0)?"男":"女";bool isParty = ((i%2)==0)?false:true;int score =QRandomGenerator::global()->bounded(60,100);createItemsARow(i,strName,sex,birth,"汉族",isParty,score);int addDays =QRandomGenerator::global()->bounded(1,90);birth=birth.addDays(addDays);}
}void TableWidgetExample::on_btnInsertRow_clicked()
{int curRow = ui->tableInfo->currentRow();ui->tableInfo->insertRow(curRow);createItemsARow(curRow,"新学生","男",QDate::fromString("2022-10-1","yyyy-M-d"),"苗族",true,88);
}void TableWidgetExample::on_btnAppendRow_clicked()
{int curRow= ui->tableInfo->rowCount();//当前行号ui->tableInfo->insertRow(curRow);createItemsARow(curRow,"新生","女",QDate::fromString("2022-6-1","yyyy-M-d"),"满族",true,98);
}void TableWidgetExample::on_btnDelCurRow_clicked()
{int curRow= ui->tableInfo->currentRow();//当前行号ui->tableInfo->removeRow(curRow);
}void TableWidgetExample::on_btnAutoHeight_clicked()
{ui->tableInfo->resizeRowsToContents();
}void TableWidgetExample::on_btnAutoWidth_clicked()
{ui->tableInfo->resizeColumnsToContents();
}void TableWidgetExample::on_btnReadToEdit_clicked()
{QTableWidgetItem *item;ui->textEdit->clear();for(int i=0;i<ui->tableInfo->rowCount();i++){QString str = QString::asprintf("Row %d:",i+1);for(int j=0;j<ui->tableInfo->columnCount()-1;j++){item= ui->tableInfo->item(i,j);str += QString("\t %1").arg(item->text());}item = ui->tableInfo->item(i,colPartyM);if(item->checkState()==Qt::Checked)str+=QString("\t %1").arg("党员");elsestr+=QString("\t %1").arg("群众");ui->textEdit->appendPlainText(str);}
}void TableWidgetExample::on_chkBoxTabEditable_clicked(bool checked)
{if(checked){ui->tableInfo->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);}else{ui->tableInfo->setEditTriggers(QAbstractItemView::NoEditTriggers);}
}void TableWidgetExample::on_chkBoxRowColor_clicked(bool checked)
{ui->tableInfo->setAlternatingRowColors(checked);
}void TableWidgetExample::on_chkBoxHeaderH_clicked(bool checked)
{ui->tableInfo->horizontalHeader()->setVisible(checked);
}void TableWidgetExample::on_chkBoxHeaderV_clicked(bool checked)
{ui->tableInfo->verticalHeader()->setVisible(checked);
}void TableWidgetExample::on_rBtnSelectRow_clicked()
{ui->tableInfo->setSelectionBehavior(QAbstractItemView::SelectRows);
}void TableWidgetExample::on_rBtnSelectItem_clicked()
{ui->tableInfo->setSelectionBehavior(QAbstractItemView::SelectItems);
}void TableWidgetExample::on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{Q_UNUSED(previousRow);Q_UNUSED(previousColumn);QTableWidgetItem *item = ui->tableInfo->item(currentRow,currentColumn);if(item==nullptr)return;labCellIndex->setText(QString::asprintf("当前单元格坐标 %d 行 %d 列",currentRow,currentColumn));labCellType->setText(QString::asprintf("获取单元格的类型 %d",item->type()));labStudID->setText(QString::asprintf("学生ID:%d",item->data(Qt::UserRole).toUInt()));
}

效果

 

 

总结

1. 容易敲错 ItemIsEnabled

2. 因为win11的原因,在默认样式下,效果不显示 设置成了Fusion ,表格的间隔行颜色变换才生效;后续继续看下 样式

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

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

相关文章

好记性不如烂笔头(三)——文件保存后打开呈现乱码问题

现象 请随博主进行下列操作&#xff0c;神奇的事情会发生—— 1、新建记事本&#xff0c;里面输入“同”字&#xff0c;保存为ANSI格式 2、再次打开会发现&#xff0c;“同”已经变成了乱码 3、类似的字还有很多&#xff0c;例如“同学”的“学”。而有些字则不会出现这种情况…

3_电机的发展及学习方法

一、电机组成及发展 1、什么是励磁&#xff1f; 在电磁学中&#xff0c;励磁是通过电流产生磁场的过程。 发电机或电动机由在磁场中旋转的转子组成。磁场可以由 永磁体或励磁线圈产生。对于带有励磁线圈的机器&#xff0c;电流必须在线圈中流动才能产生&#xff08;激发&#x…

香港服务器托管对外贸行业必要性和优势

在当今全球化的经济环境下&#xff0c;外贸企业面临着前所未有的机遇与挑战。其中&#xff0c;服务器托管的选择对于外贸企业的运营效率和市场拓展具有举足轻重的作用。香港服务器&#xff0c;凭借其独特的地理位置、优质的网络环境和卓越的服务性能&#xff0c;一直是外贸企业…

“Hello, World” 的历史

“Hello, World!” —— 初学者进入编程世界的第一步 由布莱恩柯林汉 撰写的“Hello, world”程序 (1978年) 布莱恩W.克尼汉&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多&#xff…

OS中断机制-嵌套和竞争

对于FreeRTOS最好不去用中断嵌套,中断嵌套会增加堆栈空间的使用,因为每个中断服务程序都需要保存和恢复寄存器状态,这可能会耗尽有限的堆栈空间,从而导致系统故障。以及中断嵌套时,不同的中断服务程序可能会竞争访问共享资源,从而增加死锁的风险。这可能会导致系统出现故…

Verilog进行结构描述(structural modeling)(一):基本概念

目录 1.结构描述(structural modeling)的内容&#xff1a;2.实例 微信公众号获取更多FPGA相关源码&#xff1a; 1.结构描述(structural modeling)的内容&#xff1a; 用门来描述器件的功能基于基本元件和底层模块例化语句最接近实际的硬件结构主要使用元件的定义、使用声明以…

Flink——最流批的大数据框架(流批一体)

Apache Flink基础教程 资料来源&#xff1a;Apache Flink Tutorial (tutorialspoint.com) Apache Flink是Apache Hadoop的开源本地分析数据库。它由Cloudera、MapR、Oracle和Amazon等供应商提供。本教程中提供的示例是使用Cloudera Apache Flink开发的。 本教程是为那些想要学…

fork 是一个创建新进程的系统调用

在计算机科学中&#xff0c;fork 是一个创建新进程的系统调用。具体来说&#xff0c;fork 调用会创建一个与当前进程几乎完全相同的副本&#xff0c;包括父进程的内存布局、环境变量、打开的文件描述符等。这个新的进程被称为子进程&#xff0c;而原始进程被称为父进程。 以下…

光伏开发有没有难点?如何解决?

随着全球对可再生能源的日益重视&#xff0c;光伏技术作为其中的佼佼者&#xff0c;已成为实现能源转型的关键手段。然而&#xff0c;光伏开发并非一帆风顺&#xff0c;其过程中也面临着诸多难点和挑战。本文将对这些难点进行探讨&#xff0c;并提出相应的解决策略。 一、光伏开…

12 学习总结:操作符

目录 一、操作符的分类 二、二进制和进制转换 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;二进制 &#xff08;三&#xff09;进制转换 1、2进制与10进制的互换 &#xff08;1&#xff09;2进制转化10进制 &#xff08;2&#xff09;10进制转化2进制 2…

解决vs2022scanf报错问题

vs2022scanf报错问题 大家下完vs2022之后,开心的写下一段简单的代码: #include <stdio.h> #include <stdlib.h>int main() {int a;scanf("%d", &a);printf("%d", a);return 0; } vs2022会毫不犹豫的报错,下面是报错信息: 翻译过来就是v…

探究InnoDB Compact行格式背后

目录 一、InnoDB 行格式数据准备 二、COMPACT行格式整体说明 三、记录的额外信息 &#xff08;一&#xff09;变长字段长度列表 数据结构 存储过程 读取过程 变长字段长度列表存储示例 &#xff08;二&#xff09;NULL 值位图 数据结构 存储过程 读取过程 NULL 值…

【MySQL进阶之路 | 高级篇】索引的声明与使用

1. 索引的分类 MySQL的索引包括普通索引&#xff0c;唯一性索引&#xff0c;全文索引&#xff0c;单列索引和空间索引. 从功能逻辑上说&#xff0c;索引主要分为普通索引&#xff0c;唯一索引&#xff0c;主键索引和全文索引.按物理实现方式&#xff0c;索引可以分为聚簇索引…

苹果电脑清理垃圾怎么清理 macbook怎么清理电脑垃圾文件 macos优化软件 cleanmymac怎么使用

在选择电脑时&#xff0c;不少人都会选择拥有高性能和轻薄机身的mac。一开始&#xff0c;它确实如我们所期待的那样健步如飞&#xff0c;然而&#xff0c;随着时间的流逝&#xff0c;有没有觉得您的Mac有时候像是需要一个好的春季大扫除一样&#xff1f;随着我们不断使用电脑&a…

Lobe Chat openai claude

claude-3-5-sonnet-20240620 $ docker run -d -p 3210:3210 \-e OPENAI_API_KEYsk-xxxx \-e OPENAI_PROXY_URLhttps://api-proxy.com/v1 \-e ACCESS_CODElobe66 \--name lobe-chat \lobehub/lobe-chatDocker 部署 更新 docker ps CONTAINER ID IMAGE …

神经网络参数-----学习率(Learning Rate)

学习率 学习率是训练神经网络的重要超参数之一&#xff0c;它代表在每一次迭代中梯度向损失函数最优解移动的步长。它的大小决定网络学习速度的快慢。在网络训练过程中&#xff0c;模型通过样本数据给出预测值&#xff0c;计算代价函数并通过反向传播来调整参数。重复上述过程…

Geoserver源码解读四 REST服务

文章目录 文章目录 一、概要 二、前置知识点-FreeMarker 三、前置知识点-AbstractHttpMessageConverter 3.1 描述 3.2 应用 四、前置知识点-AbstractDecorator 4.1描述 4.2 应用 五、工作空间查询解读 5.1 模板解读 5.2 请求转换器解读 一、概要 关于geoserver的r…

zabbix-agent2启动失败报错Unit zabbix-agent2.service entered failed state.

文章目录 1&#xff0c;用systemctl status zabbix-agent2查看报错状态2&#xff0c;用journalctl -xe查看一下报错日志3&#xff0c;再看一下zabbix的日志。4&#xff0c;错误修改5&#xff0c; 再次重启zabbix-agent2 1&#xff0c;用systemctl status zabbix-agent2查看报错…

Word如何在页眉中插入和删除横线

你平常是否遇见到Word的页眉中有一条横线&#xff0c;怎么也删不了&#xff01;&#xff01;&#xff01; 今天刘小生分享如何在页眉中插入和删除横线&#xff0c;我们一起操练起来吧&#xff01; 1、Word页眉插入横线 选择【插入】-【页眉页脚】&#xff0c;在“页眉页脚”…

00_Python核心编程

Python入门 一 Python初识 1 Python的历史 Python的历史python是蟒蛇的含义python是一种解释型的,面向对象的,带有动态语义的高级程序设计语言. python是一种使你在编程时能够保持自己的风格的程序设计语言,你不用费什么劲就可以实现你想要的功能,并且编写的程序清晰易懂. …