当前位置: 首页 > 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.dtcms.com/a/351959.html

相关文章:

  • Matlab使用——开发上位机APP,通过串口显示来自单片机的电压电流曲线,实现光伏I-V特性监测的设计
  • 盲盒一番赏小程序:打造个性化潮玩购物天堂
  • vs2022 Nuget包缓存下载路径配置
  • 国产机安装caj 国产机没法打开caj文件,国产机如何看论文?
  • AIGC(生成式AI)试用 35 -- AI Agent开发及工作流,LangFlow
  • github拉取OpenSSL SSL_read: Connection was reset, errno 10054
  • Element中table组件(el-table)右侧滚动条空白占位gutter处理
  • window电脑使用OpenSSL创建Ed25519密钥
  • 由倍讯科技研制的CCLinkIE转ModbusTCP网关,可达成与脉冲计数器的连接
  • Tesseract OCR之单词识别与字符分类器
  • Docker:部署Redis
  • 常见flex布局思路:flex布局上下结构
  • 2025中国生物制造科技创新论坛为何“花落”常德?
  • 新源布料厂进销存管理系统-项目分享
  • week5-[字符数组]查找
  • 木马免杀工具使用
  • 智汇云舟:视频孪生技术引领行业变革的场景应用实践
  • 第二十三天-FSMC简介
  • 技术速递|Model Context Protocol (MCP) 支持已上线 JetBrains、Eclipse 和 Xcode
  • 计算机网络:天气预报
  • SpringBoot + Redisson 实现分布式锁实战(附业务案例)
  • 【系统架构设计(一)】系统工程与信息系统基础上:系统工程基础概念
  • 29.RNN-循环神经网络
  • 微信小游戏订阅功能
  • 【SQL】深入理解MySQL存储过程:MySQL流程控制语句详解
  • SQL server 触发器的使用
  • PostgreSQL诊断系列(4/6):表空间与膨胀分析——解决“越用越大”的存储难题
  • woocommerce后台一次搜索多个ID订单的实现方法
  • 两周年创作纪念,忆笑傲江湖岁月
  • 探寻跨语言统一真理及其对NLP的未来启示