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

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.xdnf.cn/news/1372429.html

相关文章:

  • 机器学习:前篇
  • Linux系统的网络管理(二)
  • SELinux相关介绍
  • 质押、ETF、财库三箭齐发:以太坊价值逻辑的重构与演进
  • [灵动微电子 霍尔FOC MM32BIN560C]从引脚到应用
  • Ubuntu操作系统下使用mysql、mongodb、redis
  • 系统架构设计师-【2025上半年论文题目分享】
  • 探寻跨语言统一真理及其对NLP的未来启示
  • Agent实战教程:LangGraph关于智能体的架构模式与核心概念
  • 知行——同为科技24周年庆典
  • 【软件测试面试】全网最全,自动化测试面试题总结大全(付答案)
  • 二维费用背包 分组背包
  • Git命令
  • 机器学习每日一题000-矩阵和向量的乘法python实现
  • 在Excel和WPS表格中输入分数的两种方法
  • Linux正则表达式
  • shiro进行解密
  • 如何才能使RISC V架构成为机器学习的核心
  • 【Modbus-TCP】linux为主机—PC为从机通信
  • Git工具
  • 【44页PPT】极简架构MES系统解决方案介绍(附下载方式)
  • 阿里云 ECS 可观测性最佳实践
  • 简易shell
  • 【ElasticSearch】客户端选择
  • 力扣100+补充大完结
  • Linux命令详解+示例(炫彩超全)
  • 在Godot中为您的游戏添加并控制游戏角色的完整技术指南
  • IUV5G专网排障(上)
  • Markdown 编辑器 语法
  • 使用【阿里云百炼】搭建自己的大模型