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的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
名字还没想好☜6 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王7 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..10 小时前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光10 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光10 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人11 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
hansang_IR11 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘11 小时前
day7.c++继承
c++
在世修行12 小时前
从零打造 C# 工业视觉检测系统(七):串口通信 SerialPort 封装与开发
开发语言·c#·modbus rtu·rs232/rs485
沫璃染墨12 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++