Qt多元素控件之QTableWidget

Qt多元素控件之QTableWidget

🌟🌟hello,各位读者大大们你们好呀🌟🌟

🚀🚀系列专栏:【Qt的学习】

📝📝本篇内容:QTableWidget简介;QTableWidget的使用;学生信息表格

⬆⬆⬆⬆上一篇:Qt常用控件之QDial和QSlider

💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.QTableWidget简介

解决了QListWidget就该是QTableWidget,QListWidget是一个列表,只有行,而QTableWidget是一个表格,它有行也有列。因此它会比QListWidget稍微复杂一点。直接来看函数

函数声明 函数说明
QTableWidgetItem *item(int row, int column) const 根据⾏数列数获取指定的 QTableWidgetItem*
void setItem(int row, int column, QTableWidgetItem *item) 根据⾏数列数设置表格中的元素
QTableWidgetItem *currentItem() const 返回被选中的元素 QTableWidgetItem
int currentRow() const 返回被选中元素是第几行
int currentColumn() const 返回被选中元素是第⼏列
int row(const QTableWidgetItem *item) const 获取指定 item 是第⼏⾏
int column(const QTableWidgetItem *item) const 获取指定 item 是第⼏列
int rowCount() const 获取⾏数
int columnCount() const 获取列数
void insertRow(int row) 在第 row ⾏处插⼊新行
insertColumn(int column) 在第 column 列插⼊新列
removeRow(int row) 删除第row行
removeColumn(int column) 删除第column列
void setHorizontalHeaderItem(int column, QTableWidgetItem *item) 设置指定列的表头
void setVerticalHeaderItem(int row, QTableWidgetItem *item) 设置指定⾏的表头

接下来是信号

信号声明 信号说明
void cellClicked(int row, int column) 点击单元格时触发
void cellDoubleClicked(int row, int column) 双击单元格时触发
void cellEntered(int row, int column) ⿏标进⼊单元格时触发
void currentCellChanged(int row, int column, int previousRow, int previousColumn) 选中不同单元格时触发

2.QTableWidget的使用

它根QListWidget是一样的,都是可以通过图形化界面和代码来创建元素

并且假设当控件拖拽错误时,可以使用"变形为",来进行修改

3.学生信息表格

在我们平时的练习中,可以直接在图形化界面进行编辑元素,但是在实际开发中,初始内容并一定是固定的,都是从网路或文件中获取,那么此时我们就只能使用代码来编辑元素。因此这个小程序就用代码来实现

我们可以设置四个按钮和一个标签,四个按钮分别是:添加一行,删除选中行,添加一列,删除选中列,标签是用来输入表头

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建行
    ui->tableWidget->insertRow(0);
    ui->tableWidget->insertRow(1);
    ui->tableWidget->insertRow(2);

    //创建列
    ui->tableWidget->insertColumn(0);
    ui->tableWidget->insertColumn(1);
    ui->tableWidget->insertColumn(2);

    //设置列表头(水平)
    ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("学号"));
    ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("姓名"));
    ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("成绩"));

    //设置行表头(垂直)
    ui->tableWidget->setVerticalHeaderItem(0,new QTableWidgetItem("1"));
    ui->tableWidget->setVerticalHeaderItem(1,new QTableWidgetItem("2"));
    ui->tableWidget->setVerticalHeaderItem(2,new QTableWidgetItem("3"));

    //添加初始化数据
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("10"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("张三"));
    ui->tableWidget->setItem(0,2,new QTableWidgetItem("0"));

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("20"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("李四"));
    ui->tableWidget->setItem(1,2,new QTableWidgetItem("100"));

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_add_row_clicked()
{
    //获取行表头
    QString str(ui->lineEdit->text());
    //获取当前的行数
    int row=ui->tableWidget->rowCount();
    //添加一行
    ui->tableWidget->insertRow(row);
    //设置行表头
    ui->tableWidget->setVerticalHeaderItem(row,new QTableWidgetItem(str));


}

void Widget::on_pushButton_delete_row_clicked()
{
    //获取当前选中的行
    int row=ui->tableWidget->currentRow();
    //进行删除
    ui->tableWidget->removeRow(row);
}

void Widget::on_pushButton_add_column_clicked()
{
    //获取列表头
    QString str(ui->lineEdit->text());
    //获取当前的列数
    int column=ui->tableWidget->columnCount();
    //添加一行
    ui->tableWidget->insertColumn(column);
    //设置行表头
    ui->tableWidget->setHorizontalHeaderItem(column,new QTableWidgetItem(str));
}

void Widget::on_pushButton_delete_column_clicked()
{
    //获取当前选中的列
    int column=ui->tableWidget->currentColumn();
    //进行删除
    ui->tableWidget->removeColumn(column);
}

观察代码,可以发现QTableWidget添加元素的使用方法和我们地QListWidget不太一样,我们的QListWidget是可以直接添加元素内容的,而QTableWidget是需要先插入对应的行列,再设置元素的内容。
🌸🌸Qt多元素控件之QTableWidget大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
devmoon9 分钟前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
Evand J11 分钟前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦12 分钟前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.16 分钟前
java抽象类和接口
java·开发语言
xyq202425 分钟前
Pandas 安装指南
开发语言
智者知已应修善业34 分钟前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法
xixixin_35 分钟前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级
开发语言·javascript·ecmascript
Trouvaille ~38 分钟前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
CSCN新手听安44 分钟前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
CSCN新手听安1 小时前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json