QT: QTableWidget 表格中按钮槽函数 获取表格该按钮所在的行号信息

Posted 小哈龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT: QTableWidget 表格中按钮槽函数 获取表格该按钮所在的行号信息相关的知识,希望对你有一定的参考价值。


需求是这样的,在表格中添加了按钮,通过信号槽会进行按钮点击事件。
但表格中按钮的操作往往都会和该行的行号相关,一下是获取行号的方法。

// 按钮点击的信号槽,正常是不会传递行号参数的 
connect(btn_edit,SIGNAL(clicked()),this,SLOT(create_editWidget()));

// 槽函数
void PageUserSystem::create_editWidget()
{
    // 获取按钮的指针
    QPushButton *pushButton_ = dynamic_cast<QPushButton*>(this->sender());
    if(NULL == pushButton_)
    {
        return;
    }
    // 获取按钮的x坐标和y坐标
    int x = pushButton_->parentWidget()->frameGeometry().x();
    int y = pushButton_->parentWidget()->frameGeometry().y();
    // 根据按钮的x和y坐标来定位对应的单元格
    QModelIndex index = ui->table_userAdmin->indexAt(QPoint(x, y));
    // 获取该按钮所在表格的行号和列号
    int row = index.row();
    int column = index.column();
    
    //然后就可以自由的进行相关操作了
    // 比如获取该行第一列的信息:
     qDebug() << ui->table_userAdmin->item(row ,0)->Text();


用户界面代码:
内容较杂,自己去找需要的东西!

链接:https://pan.baidu.com/s/1y-C9kiqSlhvsT8rs9uQROA
提取码:9tng

完整演示代码:


mainWindow.h

 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTableWidget>
#include <QHeaderView>
#include <QHBoxLayout>
#include <QPushButton>
#include <QDebug>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void init();

public slots:
    void exit_clicked();
    void edit_clicked();

private:
    Ui::MainWindow *ui;
    QTableWidget *table ;
};
#endif // MAINWINDOW_H


mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    table = new QTableWidget(this);
    table->setGeometry(20,20,760,360);
    init();

}

void MainWindow::init()
{
    table->clear();
    //设置表头
    QTableWidgetItem    *headerItem;
    QStringList headerText;
    headerText<<"序号"<<"按钮";  //表头标题用QStringList来表示
    table->setColumnCount(headerText.count());//列数设置为与 headerText的行数相等
    table->setHorizontalHeaderLabels(headerText);
    table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    table->horizontalHeader()->setMinimumHeight(64);

    // 设置表格内每一行的数据
    table->setRowCount(5);//总行数
    for(int rowIndex =0; rowIndex<5; rowIndex++)
    {
        table->setRowHeight(rowIndex , 64);//设置行的高度
        QTableWidgetItem *item_index = new QTableWidgetItem (QString::number(rowIndex+1));
        table->setItem(rowIndex,0,item_index);

        //创建按钮
        QString str = "退出" + QString::number(rowIndex+1);
        QString str2 = "编辑" + QString::number(rowIndex+1);
        QPushButton *btn_edit = new QPushButton();
        QPushButton *btn_exit = new QPushButton();
        btn_edit->setText(str2);
        btn_exit->setText(str);
        btn_edit->setFixedSize(120,40);
        btn_exit->setFixedSize(120,40);
        btn_edit->setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;border-radius: 15px;}"
                            "QPushButton:pressed{background-color:rgb(51,129,172)}");
        btn_exit->setStyleSheet("QPushButton{color:white;background-color:rgb(51,204,255);font-family:黑体;border-radius: 15px;}"
                            "QPushButton:pressed{background-color:rgb(51,129,172)}");

        // 添加信号槽
        connect(btn_exit,SIGNAL(clicked()),this,SLOT(exit_clicked()));
        connect(btn_edit,SIGNAL(clicked()),this,SLOT(edit_clicked()));

        QHBoxLayout *vLayout = new QHBoxLayout();
        QWidget *Widget_btn = new QWidget;
        vLayout->addWidget(btn_edit);
        vLayout->addSpacing(10);
        vLayout->addWidget(btn_exit);
        Widget_btn->setLayout(vLayout);
        Widget_btn->setStyleSheet("QWidget{ border: 0px }");
        table->setCellWidget(rowIndex,1,Widget_btn);
        table->verticalHeader()->setHidden(true);

    }
}

void MainWindow::exit_clicked()
{
    // 获取按钮的指针
    QPushButton *pushButton_ = dynamic_cast<QPushButton*>(this->sender());
    if(NULL == pushButton_)
    {
        return;
    }

    qDebug() << pushButton_->text();

    // 获取按钮的x坐标和y坐标
    int x = pushButton_->parentWidget()->pos().x();
    int y = pushButton_->parentWidget()->pos().y();
   qDebug() << "x=" << x << ",y=" << y;
   // 根据按钮的x和y坐标来定位对应的单元格
   QModelIndex index = table->indexAt(QPoint(x,y));
   // 获取该按钮所在表格的行号和列号
   int row = index.row();
   int column = index.column();

   // 比如获取该行第一列的信息:
   qDebug() << table->item(row ,0)->text();
}


void MainWindow::edit_clicked()
{
    // 获取按钮的指针
    QPushButton *pushButton_ = dynamic_cast<QPushButton*>(this->sender());
    if(NULL == pushButton_)
    {
        return;
    }

    qDebug() << pushButton_->text();

    // 获取按钮的父类x坐标和y坐标
    int x = pushButton_->parentWidget()->pos().x();
    int y = pushButton_->parentWidget()->pos().y();
   qDebug() << "x=" << x << ",y=" << y;

   // 根据按钮的x和y坐标来定位对应的单元格
   QModelIndex index = table->indexAt(QPoint(x,y));
   // 获取该按钮所在表格的行号和列号
   int row = index.row();
   int column = index.column();

   // 比如获取该行第一列的信息:
   qDebug() << table->item(row ,0)->text();
}

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


main()

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}


原文链接:https://blog.csdn.net/sazass/article/details/114143587

以上是关于QT: QTableWidget 表格中按钮槽函数 获取表格该按钮所在的行号信息的主要内容,如果未能解决你的问题,请参考以下文章

Qt在QTableWidgetView等表格中添加右击菜单

QT如何获取QTableWidget表格中的高亮位置的行数?

QTableWidget 信号和槽移动字段

QTableWidget嵌入QpushButton后定位QpushButton

qt自定义槽函数不起作用

Qt中槽函数如何获取按钮QPushButton的按钮文本