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()
{
}