在Qt中,可以通過信號槽函數獲取發送者對象,主要有兩個核心函數qobject_cast<T>()和sender()。用法如下
1.1先通過connect綁定信號槽,代碼如下:
QLineEdit *lineEdit = new QLineEdit();
lineEdit->setObjectName("lineEdit");
connect(lineEdit,&QLineEdit::textChanged,this,&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,&slot_lineEditGroup_textChange);
void QWidget::slot_lineEditGroup_textChange(QString str)
{
QLineEdit *lineEdit=qobject_cast<QLineEdit *>(sender());
qDebug()<<"lineEdit->objectName()=="<<lineEdit->objectName();
}
1.4注意點
a1 這種獲取對象的方式只能獲取被connect綁定的對象的類型。
a2 qobject_cast<T>():是安全轉換函數,安全轉換小括號()的類型爲類型T。轉換的類型T必須是繼承於QObject的類,否則轉換不成功。
a3 sender():當通過信號槽連接槽函數時,用sender()函數可以獲取信號發送者對象,即invoke對象,一般在槽函數調用sender()函數獲取發送對象,即QObject *object=sender();。然後再通過安全轉換函數轉化爲對應類型。
參考內容:
https://www.cnblogs.com/findumars/p/5805096.html(參考:qobject_cast<T>(sender());用法)