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

相关推荐
库玛西7 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_199913 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲14 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员14 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导14 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan14 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子14 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化15 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_6952514915 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說16 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习