QT sender获取是谁的事件

QT sender获取是谁的事件

下面方法的主要思想是对比sender里边的objectname,从而确定是谁发出的信号。

其实sender里边存放的是发出信号的那个对象的指针,如果想要改变那个对象的一些属性,直接把sender强制转换为那个类型的一个指针用就好。

tt.h

#ifndef TT_H
#define TT_H

#include <QWidget>
#include <string>
#include <iostream>
#include <vector>
#include <QPushButton>
#include <QVBoxLayout>
using namespace std;

class tt : public QWidget
{
    Q_OBJECT

public:
    static const int n=3;

    tt(QWidget *parent = nullptr);
    ~tt();
public slots:
    void witch_button()
    {
        int id = 0;
        //方法一循环比较objectname
        string button_names[n] = {
            "1", "2", "3"
        };
        for(int i=0;i!=n;i++)
        {
            if(this->sender()->objectName().toStdString()==button_names[i])
            {
                id = i;
                break;
            }
        }

        //方法2,将数字类型的object那么直接转出来
        id=atoi(this->sender()->objectName().toStdString().c_str());
        printf("%d\n", id);
        fflush(stdout);
    }
};
#endif // TT_H

tt.cpp

#include "tt.h"

tt::tt(QWidget *parent)
    : QWidget(parent)
{
    QVBoxLayout *tt_layout = new QVBoxLayout();
    vector<QPushButton *> button_vector;
    for(int i=0;i!=n;i++)
    {
        button_vector.push_back(new QPushButton());
        button_vector[i]->setObjectName(to_string(i).c_str());
        button_vector[i]->setText(to_string(i).c_str());
        tt_layout->addWidget(button_vector[i]);
        connect(button_vector[i], &QPushButton::clicked, this, &tt::witch_button);
    }

    this->setLayout(tt_layout);
}

tt::~tt()
{
}


文章目录