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



