C++ Qt qtablewidget动态添加按钮并实现对应的点击事件

5 篇文章 1 订阅

首先需要在QTableWidget中的某个单元格中添加QPushButton控件,可以使用setCellWidget方法来实现:

```c++
// 在第2行第1列处添加一个按钮

QPushButton* button = new QPushButton("Button", this);
connect(button, SIGNAL(clicked()), this, SLOT(on_button_clicked()));
ui->tableWidget->setCellWidget(1, 0, button);


```

这里创建了一个QPushButton对象,并将其与on_button_clicked()槽函数连接起来。然后通过setCellWidget方法将该按钮放置到表格中的指定位置。

接下来需要实现on_button_clicked()槽函数,以处理按钮点击事件。可以根据被点击的按钮所在的单元格位置来获取对应的数据:

```c++ 

void MainWindow::on_button_clicked()
{
    QObject* obj = sender();
    if (obj != nullptr) {
        // 获取被点击的按钮所在的单元格
        int row = ui->tableWidget->row(obj);
        int col = ui->tableWidget->column(obj);
        // 获取该单元格对应的数据
        QTableWidgetItem* item = ui->tableWidget->item(row, col);
        if (item != nullptr) {
            QString data = item->data(Qt::DisplayRole).toString();
            qDebug() << "Button clicked: " << data;
        }
    }
}


```

这里使用sender()方法获取触发当前槽函数的对象,即被点击的QPushButton控件。然后再通过row和column方法获取该按钮所在的行列数,并使用item方法获取该单元格对应的QTableWidgetItem对象,从而获取该单元格中存储的数据。

完整示例代码如下:

```c++

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 添加表头
    QStringList headers;
    headers << "Name" << "Age" << "Action";
    ui->tableWidget->setColumnCount(headers.size());
    ui->tableWidget->setHorizontalHeaderLabels(headers);

    // 添加数据
    QList<QStringList> data = {
        {"Alice", "20", ""},
        {"Bob", "30", ""},
        {"Charlie", "40", ""}
    };
    int row = 0;
    for (const auto& rowData : data) {
        int col = 0;
        for (const auto& cellData : rowData) {
            QTableWidgetItem* item = new QTableWidgetItem(cellData);
            ui->tableWidget->setItem(row, col, item);
            ++col;
        }
        QPushButton* button = new QPushButton("Button", this);
        connect(button, SIGNAL(clicked()), this, SLOT(on_button_clicked()));
        ui->tableWidget->setCellWidget(row, col, button);
        ++row;
     }
}

MainWindow::~MainWindow()
{
   delete ui;
}

void MainWindow::on_button_clicked()
{
   QObject* obj = sender();
   if (obj != nullptr) {
       int row = ui->tableWidget->row(obj);
       int col = ui->tableWidget->column(obj);
       QTableWidgetItem* item = ui->tableWidget->item(row, col - 1);
       if (item != nullptr) {
           QString data = item->data(Qt::DisplayRole).toString();
           qDebug() << "Button clicked: " << data;
       }
   }
}


```

这里使用了QList<QStringList>来存储表格中的数据,每个QStringList表示一行数据。在添加每行数据时,同时也会为该行添加一个QPushButton控件,并将其放置到Action列中。点击按钮时,会调用on_button_clicked()槽函数来处理事件。

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值