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

相关推荐
froginwe112 小时前
PostgreSQL 表达式详解
开发语言
王老师青少年编程2 小时前
信奥赛C++提高组csp-s之状压DP详解及编程实例
c++·动态规划·csp·状压dp·信奥赛·csp-s·提高组
LuminescenceJ2 小时前
RPC通信中的Context上下文如何跨进程传递消息,gRPC为例分析
开发语言·网络·后端·网络协议·rpc·golang
IT陈图图2 小时前
Flutter × OpenHarmony 实战:优雅构建确认对话框的组件化方案
开发语言·javascript·flutter
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony 简易文本末尾字符查看器开发指南
开发语言·javascript·flutter
Lxinccode2 小时前
python(70) : 网页IDE
开发语言·ide·python·网页ide
zmjjdank1ng2 小时前
理解bash和shell
linux·运维·开发语言·bash
码界奇点2 小时前
基于Beego v2与Go语言的网站管理后台系统设计与实现
开发语言·golang·毕业设计·go语言·源代码管理·beego
潇凝子潇2 小时前
Arthas 火焰图的使用
开发语言·python