函数原型
template <class T>
inline T qobject_cast(const QObject *object)
如果传入的object是T或者T的子类,则返回T,否则返回0。如果object是0则返回0。
类T必须直接(或间接)继承自QObject,并且要声明宏Q_OBJECT。
如果T没有声明宏Q_OBJECT,那么函数的返回值是不确定的
//3个信号绑定同一个槽函数
connect(ui->pushButton_send1,&QPushButton::clicked,this,&MainWindow::deal_sendclicked);
connect(ui->pushButton_send2,&QPushButton::clicked,this,&MainWindow::deal_sendclicked);
connect(ui->radioButton_send,&QPushButton::clicked,this,&MainWindow::deal_sendclicked);
void MainWindow::deal_sendclicked()
{
//QAbstractButton 类是按钮widgets的抽象基类。
//qobject_cast<QAbstractButton*>(sender()) 返回发送信号的对象指针
if(qobject_cast<QAbstractButton*>(sender())==ui->pushButton_send1)
{
qDebug()<<"pushButton_send1";
}
else if(qobject_cast<QAbstractButton*>(sender())==ui->pushButton_send2)
{
qDebug()<<"pushButton_send2";
}
else if(qobject_cast<QAbstractButton*>(sender())==ui->radioButton_send)
{
qDebug()<<"radioButton_send";
}
}
QPushButton和QRadioButton都继承于QAbstractButton
利用强制转换也可以拿到当前发送信号的指针对象
QPushButton *btn=(QPushButton*)this->sender();
qDebug()<<btn->text();