多元素控件QTableWidget
使用QTableWidget表示一个表格控件,一个表格中包含若干行、每一个行又包含若干列。
表格中的每一个单元格,都是一个QTableWidget对象。
- QTableWidget核心方法
方法 | 说明 |
---|---|
item(int row, int column) | 根据⾏数列数获取指定的 QTableWidgetItem* |
setItem(int row, int column, QTableWidget*) | 根据⾏数列数设置表格中的元素 |
currentItem() | 返回被选中的元素 QTableWidgetItem* |
currentRow() | 返回被选中元素是第⼏⾏ |
currentColumn() | 返回被选中元素是第⼏列 |
row(QTableWidgetItem* ) | 获取指定 item 是第⼏⾏ |
column(QTableWidgetItem* ) | 获取指定 item 是第⼏列 |
rowCount() | 获取⾏数 |
columnCount() | 获取列数 |
insertRow(int row) | 在第 row ⾏处插⼊新⾏ |
insertColumn(int column) | 在第 column 列插⼊新列 |
removeRow(int row) | 删除第 row ⾏ |
removeColumn(int column) | 删除第 column 列 |
setHorizontalHeaderItem(int column, QTableWidget*) | 设置指定列的表头 |
setVerticalHeaderItem(int row, QTableWidget*) | 设置指定⾏的表头 |
- QTableWidgetItem核心信号
信号 | 说明 |
---|---|
cellClicked(int row, int column) | 点击单元格时触发 |
cellDoubleClicked(int row, int column) | 双击单元格时触发 |
cellEntered(int row, int column) | ⿏标进⼊单元格时触发 |
currentCellChanged(int row, int column, int previousRow, int previousColumn) | 选中不同单元格时触发 |
- QTableWidgetItem核心方法
方法 | 说明 |
---|---|
row() | 获取当前是第⼏⾏ |
column() | 获取当前是第⼏列 |
setText(const QString&) | 设置⽂本 |
setTextAlignment(int) | 设置⽂本对⻬ |
setIcon(const QIcon&) | 设置图标 |
setSelected(bool) | 设置被选中 |
setSizeHints(const QSize&) | 设置尺⼨ |
setFont(const QFont&) | 设置字体 |
例子:使用QTableWidget新增行与列
(1)设置一个TableWidget、四个按钮、一个lineEdit
(2)当输⼊框内容为空的时候, 显⽰提⽰信息
也可以在属性栏里面设置
(3)构造表格的三行三列
(4)给三行三列创建行名与列名
(5)设置表格中初始化数据
(6)编写四个按钮的slot函数
代码实现
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 当输⼊框内容为空的时候, 显⽰提⽰信息
ui->lineEdit->setPlaceholderText("输入新增的行名/列名");
// 创建 3 行
ui->tableWidget->insertRow(0);
ui->tableWidget->insertRow(1);
ui->tableWidget->insertRow(2);
// 创建 3 列
ui->tableWidget->insertColumn(0);
ui->tableWidget->insertColumn(1);
ui->tableWidget->insertColumn(2);
// 创建 3 行的行名
ui->tableWidget->setVerticalHeaderItem(0, new QTableWidgetItem("学生1"));
ui->tableWidget->setVerticalHeaderItem(1, new QTableWidgetItem("学生2"));
ui->tableWidget->setVerticalHeaderItem(2, new QTableWidgetItem("学生3"));
// 创建 3 列的列名
ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("姓名"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("年龄"));
ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("性别"));
// 初始化表格
ui->tableWidget->setItem(0, 0, new QTableWidgetItem("张三"));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem("19"));
ui->tableWidget->setItem(0, 2, new QTableWidgetItem("男"));
ui->tableWidget->setItem(1, 0, new QTableWidgetItem("李四"));
ui->tableWidget->setItem(1, 1, new QTableWidgetItem("20"));
ui->tableWidget->setItem(1, 2, new QTableWidgetItem("女"));
ui->tableWidget->setItem(2, 0, new QTableWidgetItem("王五"));
ui->tableWidget->setItem(2, 1, new QTableWidgetItem("20"));
ui->tableWidget->setItem(2, 2, new QTableWidgetItem("男"));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_insertRow_clicked()
{
// 获取行数
int rowCount = ui->tableWidget->rowCount();
// 插入新行
ui->tableWidget->insertRow(rowCount);
// 获取输入框里的内容
const QString& text = ui->lineEdit->text();
// 将内容创建为行名
ui->tableWidget->setVerticalHeaderItem(rowCount, new QTableWidgetItem(text));
}
void Widget::on_pushButton_removeRow_clicked()
{
// 获取选中的行数
int currentROw = ui->tableWidget->currentRow();
// 删除选中的行
ui->tableWidget->removeRow(currentROw);
}
void Widget::on_pushButton_insertColumn_clicked()
{
// 获取列数
int columnCount = ui->tableWidget->columnCount();
// 插入新列
ui->tableWidget->insertColumn(columnCount);
// 获取输入框里的内容
const QString& text = ui->lineEdit->text();
// 将内容创建为列名
ui->tableWidget->setHorizontalHeaderItem(columnCount, new QTableWidgetItem(text));
}
void Widget::on_pushButton_removeColumn_clicked()
{
// 获取选中的列数
int currentColum = ui->tableWidget->currentColumn();
// 删除选中的列
ui->tableWidget->removeColumn(currentColum);
}