Qt中通過信號槽函數獲取發送信號的對象(qobject_cast、sender)

在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());用法)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章