QT(QTableWidget)

QT6


QTableWidget

QTableWidget是一种Item Widget组件,它以表格形式和管理数据,表格的每个单元格关联一个QTableWidgetItem对象,可以设置每个单元格的文字内容、字体、文字颜色、背景色、图标等,还可以有复选框。每个单元格还可以存储用户数据

常用属性和方法

Qt6中QTableWidget常用属性和方法

行列操作

类别属性/方法说明
setRowCount(int rows)设置表格的行数
setColumnCount(int columns)设置表格的列数
rowCount() const获取当前行数
columnCount() const获取当前列数
insertRow(int row)在指定位置插入新行
insertColumn(int column)在指定位置插入新列
removeRow(int row)移除指定行
removeColumn(int column)移除指定列

表头设置

属性/方法说明
setHorizontalHeaderLabels(const QStringList &labels)设置水平表头的标签文本
setVerticalHeaderLabels(const QStringList &labels)设置垂直表头的标签文本
horizontalHeader() const获取水平表头对象
verticalHeader() const获取垂直表头对象
setHorizontalHeaderItem(int column, QTableWidgetItem *item)设置水平表头项目
setVerticalHeaderItem(int row, QTableWidgetItem *item)设置垂直表头项目

单元格操作

属性/方法说明
setItem(int row, int column, QTableWidgetItem *item)在指定位置设置单元格项目
item(int row, int column) const获取指定位置的单元格项目
takeItem(int row, int column)移除并返回指定位置的单元格项目
setCellWidget(int row, int column, QWidget *widget)在指定单元格中放置控件
cellWidget(int row, int column) const获取指定单元格中的控件
setCurrentCell(int row, int column)设置当前选中的单元格
currentRow() const获取当前选中行的索引
currentColumn() const获取当前选中列的索引
selectedItems() const获取所有选中的项目列表
selectedRanges() const获取所有选中的范围列表

外观与行为

属性/方法说明
setEditTriggers(QAbstractItemView::EditTriggers triggers)设置单元格编辑触发条件
setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)设置选择行为
setSelectionMode(QAbstractItemView::SelectionMode mode)设置选择模式
setShowGrid(bool show)设置是否显示网格线
setGridStyle(Qt::PenStyle style)设置网格线样式
setSpan(int row, int column, int rowSpan, int columnSpan)合并单元格
setAlternatingRowColors(bool enable)设置是否交替行颜色
setSortingEnabled(bool enable)设置是否启用排序
sortByColumn(int column, Qt::SortOrder order)按指定列排序

布局调整

属性/方法说明
resizeColumnsToContents()调整列宽以适应内容
resizeRowsToContents()调整行高以适应内容
horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode mode)设置水平表头的列宽调整模式
verticalHeader()->setSectionResizeMode(QHeaderView::ResizeMode mode)设置垂直表头的行高调整模式
setColumnWidth(int column, int width)设置指定列的宽度
setRowHeight(int row, int height)设置指定行的高度

信号

属性/方法说明
cellClicked(int row, int column)单元格被点击时触发
cellDoubleClicked(int row, int column)单元格被双击时触发
cellChanged(int row, int column)单元格内容变化时触发
cellActivated(int row, int column)单元格被激活时触发
cellEntered(int row, int column)鼠标进入单元格时触发
cellPressed(int row, int column)单元格被按下时触发
currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)当前单元格变化时触发

样式设置

属性/方法说明
setStyleSheet(const QString &styleSheet)设置样式表
setFrameShape(QFrame::Shape shape)设置外边框形状
setFrameShadow(QFrame::Shadow shadow)设置外边框阴影效果
setLineWidth(int width)设置线宽
setMidLineWidth(int width)设置中线宽度

代码测试

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QDebug>
#include <QString>
#include <QTableWidgetItem>
#include <QRandomGenerator>
#include <QDate>
#include <QVariant>
#include <QTableWidget>
#include <QLabel>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->tableWidget->setShowGrid(false);labCellIndex = new QLabel("当前单元坐标:",this);labCellIndex->setMinimumWidth(240);labCellType = new QLabel("当前单元格类型:",this);labCellType->setMinimumWidth(200);labStudId = new QLabel("当前学生ID:");labStudId->setMinimumWidth(200);ui->statusBar->addWidget(labCellIndex);ui->statusBar->addWidget(labCellType);ui->statusBar->addPermanentWidget(labStudId);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btnSetHeader_clicked()
{QStringList headText;headText << "姓名"<<"性别"<<"出生时间"<<"民族"<<"分数"<<"是否党员";ui->tableWidget->setColumnCount(headText.count());// ui->tableWidget->setHorizontalHeaderItem(headText)for(int i = 0; i < ui->tableWidget->columnCount() ; i++){QTableWidgetItem* headItem = new QTableWidgetItem(headText.at(i));QFont font = headItem->font();font.setBold(true);font.setPointSize(11);headItem->setFont(font);headItem->setForeground(QBrush(Qt::red));ui->tableWidget->setHorizontalHeaderItem(i,headItem);}
}void MainWindow::on_btnSetLine_clicked()
{ui->tableWidget->setRowCount(ui->spinBox->value());
}void MainWindow::on_btnInitTable_clicked()
{ui->tableWidget->clearContents();QDate birth(2000,2,2);for(int i = 0 ; i < ui->tableWidget->rowCount() ; i++){QString strName = QString("学生%1").arg(i);QString strSex = (i%2)?"男生":"女生";bool isParty = (i%2)?false:true;// 生成60-100之间的分数int score = QRandomGenerator::global()->bounded(60,101);createItemsARos(i,strName,strSex,birth,"汉族",isParty,score);birth = birth.addDays(1);}
}void MainWindow::createItemsARos(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score)
{uint studID = 20221000;QTableWidgetItem* item = new QTableWidgetItem(name,ctName);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);studID += rowNo;item->setData(Qt::UserRole,QVariant(studID));ui->tableWidget->setItem(rowNo,colName,item);QIcon icon(":/icon/C:/Users/BananaLi/Desktop/QT相关/图标/煎蛋.png");QIcon icon2(":/icon/C:/Users/BananaLi/Desktop/QT相关/图标/牛奶.png");item = new QTableWidgetItem(sex,ctSex);item->setIcon(sex=="男生"?icon:icon2);item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableWidget->setItem(rowNo,colSex,item);item = new QTableWidgetItem(birth.toString("yyyy-MM-dd"),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);item = new QTableWidgetItem("党员",ctPartyM);item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsUserCheckable);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);item->setCheckState(isPm?Qt::Checked:Qt::Unchecked);item->setBackground(QBrush(Qt::yellow));ui->tableWidget->setItem(rowNo,ColPartyM,item);item = new QTableWidgetItem(QString::number(score),ctScore);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableWidget->setItem(rowNo,ColScore,item);}void MainWindow::on_btnInsertLine_clicked()
{// 获取当前行int curRow = ui->tableWidget->currentRow();ui->tableWidget->insertRow(curRow);createItemsARos(curRow,"新学生","男生",QDate::fromString("2025-1-1","yyyy-M-d"),"汉族",false,79);
}void MainWindow::on_btnAddLine_clicked()
{// 获行数int curRow = ui->tableWidget->rowCount();ui->tableWidget->insertRow(curRow);createItemsARos(curRow,"老同学","女生",QDate::fromString("2025-2-2","yyyy-M-d"),"汉族",true,80);
}void MainWindow::on_btnDelLine_clicked()
{int curRow = ui->tableWidget->currentRow();ui->tableWidget->removeRow(curRow);}void MainWindow::on_btnAutoLineH_clicked()
{ui->tableWidget->resizeRowsToContents();
}void MainWindow::on_btnAutoLineW_clicked()
{ui->tableWidget->resizeColumnsToContents();
}void MainWindow::on_btnRideToEdit_clicked()
{QTableWidgetItem* item = new QTableWidgetItem();ui->plainTextEdit->clear();for(int i = 0; i< ui->tableWidget->rowCount();i++){QString str = QString::asprintf("第%d行",i+1);for(int j = 0;j < ui->tableWidget->columnCount()-1;j++){item = ui->tableWidget->item(i,j);str+=item->text()+" ";}item = ui->tableWidget->item(i,ColPartyM);if(item->checkState() == Qt::Checked){str+="党员";}else{str+="群众";}ui->plainTextEdit->appendPlainText(str);}}void MainWindow::on_checkBoxEditable_clicked(bool checked)
{if(checked){ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);}else{ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);}
}void MainWindow::on_checkBoxLowColor_clicked(bool checked)
{ui->tableWidget->setAlternatingRowColors(checked);
}void MainWindow::on_checkBoxDisplayHeader_clicked(bool checked)
{ui->tableWidget->horizontalHeader()->setVisible(checked);
}void MainWindow::on_checkBoxDisplayVertical_clicked(bool checked)
{ui->tableWidget->verticalHeader()->setVisible(checked);
}void MainWindow::on_radioButtonSelectLine_clicked()
{ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
}void MainWindow::on_radioButtonSelectCell_clicked()
{ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
}void MainWindow::on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{Q_UNUSED(previousRow);Q_UNUSED(previousColumn);QTableWidgetItem* item = ui->tableWidget->item(currentRow,currentColumn);if(item == nullptr) return;labCellIndex->setText(QString::asprintf("当前单元格坐标:%d,%d",currentRow,currentColumn));labCellType->setText(QString::asprintf("当前单元格类型:%d",item->type()));item = ui->tableWidget->item(currentRow,colName);labStudId->setText(QString::asprintf("学生ID:%d",item->data(Qt::UserRole).toUInt()));
}

效果展示

在这里插入图片描述

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

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

相关文章

Sentinel相关记录

系列文章目录 draft Sentinel 是阿里巴巴开源的 轻量级服务防护组件&#xff0c;主要用于实现以下功能&#xff1a;流量控制FlowRule&#xff08;Rate Limiting&#xff09;&#xff1a;限制单位时间内的请求量&#xff0c;防止系统过载。 熔断降级DegradeRule&#xff08;Ci…

2025年渗透测试面试题总结-29(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 二百四十一、XSS 设置Http-Only如何绕过 二百四十二、XSS攻击手段分类 二百四十三、高杀软覆盖工作组的渗…

如何用Wireshark捕获当前房间路由器和主机的数据包

一、前期工作 在我的这篇文章中&#xff1a; Wireshark USRP联合波形捕获&#xff08;上&#xff09;-CSDN博客 通过192.168.1.103这个主机ip筛选Wireshark捕获的数据包&#xff0c;认为Source和Direction中至少一个包含192.168.1.103才能代表路由器和主机之间的WiFi信号。 …

深度解析游戏引擎中的相机:视图矩阵

在现代游戏引擎中&#xff0c;相机系统是不可或缺的一部分。它决定了玩家在游戏中看到的视角和场景。而视图矩阵作为相机系统的核心组件之一&#xff0c;起到了至关重要的作用。本文将深入探讨视图矩阵的原理、计算方法及其在游戏引擎中的应用。 视图矩阵的基本概念 视图矩阵…

96、23种设计模式之原型模式(5/23)

原型模式&#xff08;Prototype Pattern&#xff09;是创建型设计模式的一种&#xff0c;其核心思想是通过复制现有对象&#xff08;原型&#xff09;来创建新对象&#xff0c;而非通过构造函数或工厂方法从头构建。该模式将对象的创建过程从构造逻辑转移到复制操作&#xff0c…

【python与生活】如何用Python写一个简单的自动整理文件的脚本?

用 Python 写一个自动整理文件的脚本很简单&#xff0c;核心思路是&#xff1a;按文件后缀&#xff08;如 .jpg、.pdf&#xff09;将文件分类&#xff0c;移动到对应的文件夹&#xff08;如「图片」「文档」&#xff09;中。以下是一个实用的实现方案&#xff0c;新手也能轻松修…

SELinux相关介绍

目录 1.SELinux 概述 2.SELinux 的执行模式 3.SELinux 的使用 1.SELinux 概述 SELinux&#xff08; Security Enhanced Linux 安全性增强的Linux&#xff09;&#xff0c;由美国国家安全局 NSA&#xff08;National Security Agency&#xff09;开发&#xff0c;构建与 Kernel …

【C语言练习】汉诺塔

一、题目 介绍&#xff1a;汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆…

随机森林实战:在鸢尾花数据集上与决策树和逻辑斯蒂回归进行对比

前言 集成学习通过组合多个模型的优势&#xff0c;常能获得比单一模型更优的性能&#xff0c;随机森林便是其中的典型代表。它基于 Bagging 思想&#xff0c;通过对样本和特征的双重随机采样&#xff0c;构建多棵决策树并综合其结果&#xff0c;在降低过拟合风险的同时&#xf…

(计算机网络)TCP 三握中第三次 ACK 丢失会发生什么?

在 TCP 的三次握手过程中&#xff0c;如果 第三次 ACK 丢失&#xff0c;TCP 是如何保证连接可靠建立的呢&#xff1f;1️⃣ 场景说明第三次 ACK&#xff1a;客户端发送给服务器的 ACK&#xff0c;确认服务器的 SYN-ACK。假设该 ACK 在网络传输过程中丢失。2️⃣ 客户端状态客户…

容智Report Agent2.0重磅发布!重新定义企业数据分析AI时代

在数据成为生产要素之一的今天&#xff0c;很多企业依然面临这样的困境&#xff1a; 想要一份年度财务分析&#xff0c;财务团队可能要忙半个月甚至一个月&#xff1b;想查一个业务指标&#xff0c;要先找出在哪个系统&#xff0c;再申请权限、写SQL、调报表&#xff0c;折腾半…

高阶数据结构---ST表

hello大家好&#xff0c;今天是2025年8月23日&#xff0c;我要来给大家分享的是一个高阶数据结构---ST表。 一&#xff1a;引入 1.RMQ问题&#xff1a; 对于一个长度为 n 的序列&#xff0c;有 m 次查询操作&#xff0c;每次查询为一个区间 [l&#xff0c;r] 的最大值&#…

docker 安装nacos(vL2.5.0)

查找nacos 的所需的镜像版本 https://hub.docker.com/r/nacos/nacos-server/tags 拉取你所需的版本&#xff08;我们用v2.5.0&#xff09; docker pull nacos/nacos-server:v2.5.0 注意&#xff1a;因为我们需要挂载外配置文件 直接用volume 挂载目录 缺少初始文件报错 我们…

在github上通过dmca数字版权申诉侵权并删除侵权仓库

DMCA是什么&#xff1f; 《数字千年版权法案》&#xff08;DMCA&#xff09;为版权所有者&#xff08;包括软件开发人员&#xff09;创建了一个标准化的流程&#xff0c;要求GitHub删除侵权内容。您可以在美国版权局的官方网站上找到有关DMCA的更多信息。有关GitHub如何处理DM…

AI安全监控与人才需求的时间悖论(对AI安全模型、AI安全人才需求的一些思考)

当监控者与被监控者都是AI时&#xff0c;谁来监控监控者&#xff1f;这个看似简单的问题&#xff0c;却揭示了人工智能安全领域的根本性困境。一、问题的提出&#xff1a;当AI监控AI 随着大语言模型和生成式AI的快速发展&#xff0c;AI系统在元认知层面的能力越来越强&#xff…

AI模型部署 - 大型语言模型(LLM)推理部署中的实际显存评估

目录 第一部分:大型语言模型(LLM)推理显存占用的核心原理 1.1 显存占用的主要构成部分 1.2 影响显存占用的关键因素 1.2.1 模型架构:MoE vs. 稠密模型 1.2.2 上下文长度与并发数 1.2.3 部署方式与推理框架 1.2.4 硬件能力 第二部分:显存占用的精确计算方法 2.1 模…

【大语言模型 16】Transformer三种架构深度对比:选择最适合你的模型架构

【大语言模型 16】Transformer三种架构深度对比&#xff1a;选择最适合你的模型架构 关键词&#xff1a;Transformer架构&#xff0c;Encoder-Only&#xff0c;Decoder-Only&#xff0c;Encoder-Decoder&#xff0c;BERT&#xff0c;GPT&#xff0c;T5&#xff0c;模型选择&…

【LeetCode 热题 100】31. 下一个排列

Problem: 31. 下一个排列 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(N)空间复杂度&#xff1a;O(1)整体思路 这段代码旨在解决经典的 “下一个排列” (Next Permutation) 问题。问题要求重新排列一个整数数组&#xff0c;使其变为字典序上的下一个更大的排列…

【Linux 进程】进程程序替换

文章目录1.进程替换的六个库函数2.execl1.进程替换的六个库函数 使用 man 3 execl 进行查询&#xff0c;3表示 Linux 中的3号手册&#xff0c;即为库函数&#xff08;例如C标准库中的库函数&#xff0c;printf&#xff0c;malloc&#xff09; man 1: 用户命令&#xff08;在sh…

ReasonRank: Empowering Passage Ranking with Strong Reasoning Ability

主要内容总结 本文提出了一种具有强推理能力的列表式段落重排序模型ReasonRank,旨在解决现有重排序模型在推理密集型场景(如复杂问答、数学问题、代码查询等)中表现不佳的问题,核心原因是这类场景缺乏高质量的推理密集型训练数据。 为解决这一问题,研究团队: 设计了自动…