天天看點

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();
}
           
Qt中通過信号槽函數擷取發送信号的對象(qobject_cast、sender)

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