【Qt】多元素控件QTableWidget

 多元素控件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);
}

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值