在Qt中,可以通过信号槽函数获取发送者对象,主要有两个核心函数qobject_cast()和sender()。用法如下

1.1先通过connect绑定信号槽,代码如下:

QLineEdit *lineEdit = new QLineEdit();
lineEdit->setObjectName("lineEdit");
connect(lineEdit,&QLineEdit::textChanged,this,&MainWindow::slot_lineEditGroup_textChange);

1.2在槽函数中,通过qobject_cast<>()和sender()函数获取发送者对象,代码如下

void QWidget::slot_lineEditGroup_textChange(QString str)
{
QLineEdit *lineEdit=qobject_cast<QLineEdit *>(sender());
qDebug()<<"lineEdit->objectName()=="<<lineEdit->objectName();
}

1.3完整代码和输入结果如下所示:

QLineEdit *lineEdit = new QLineEdit();
lineEdit->setObjectName("lineEdit");
connect(lineEdit,&QLineEdit::textChanged,this,&MainWindow::slot_lineEditGroup_textChange);

void QWidget::slot_lineEditGroup_textChange(QString str)
{
QLineEdit *lineEdit=qobject_cast<QLineEdit *>(sender());
qDebug()<<"lineEdit->objectName()=="<<lineEdit->objectName();
}

Qt中通过信号槽函数获取发送信号的对象(qobject_cast、sender)_取对象
1.4注意点
a1 这种获取对象的方式只能获取被connect绑定的对象的类型。

a2 qobject_cast():是安全转换函数,安全转换小括号()的类型为类型T。转换的类型T必须是继承于QObject的类,否则转换不成功。

a3 sender():当通过信号槽连接槽函数时,用sender()函数可以获取信号发送者对象,即invoke对象,一般在槽函数调用sender()函数获取发送对象,即QObject *object=sender();。然后再通过安全转换函数转化为对应类型。