官方文檔:
T qobject_cast ( QObject * object )
本方法返回object向下的轉型T,如果轉型不成功則返回0,如果傳入的object本身就是0則返回0。
在使用時有兩個限制:
1# T類型必須繼承自QObject。
2# 在聲明時必須有Q_OBJECT宏。
使用場景1:
當某一個Object emit一個signal的時候,它就是一個sender, 系統會記錄下當前是誰emit出這個signal的,
所以你在對應的slot里就可以通過 sender()得到當前是誰invoke了你的slot。
有可能多個 Object的signal會連接到同一個signal(例如多個Button可能會connect到一個slot函數onClick()),
因此這是就 需要判斷到底是哪個Object emit了這個signal,根據sender的不同來進行不同的處理.
在槽函數中:
QObject * obj = sender(); //返回發出信號的對象,用QObject類型接收
QPushButton *button_tmp = qobject_cast<QPushButton *>(obj); //向下轉型為按鈕類型
...對此按鈕的其他操作
使用場景2:
通過QWidget * QApplication::focusWidget()可以獲得當前擁有焦點的widget,然后和你的那幾個可能有焦點的widget逐一比對即可執行對應操作
QWidget * fWidget = qApp->focusWidget();
if (lineEdit1 == qobject_cast<QLineEdit *>(fWidget ))
{
//lineEdit1
}
else if(lineEdit2 == qobject_cast<QLineEdit *>(fWidget ))
{
//lineEdit2
}
else if(lineEdit3 == qobject_cast<QLineEdit *>(fWidget ))
{
//lineEdit3
}
else if(textEdit == qobject_cast<QTextEdit *>(fWidget ))
{
//textEdit
}
參考:http://blog.csdn.net/masibuaa/article/details/8741029
http://blog.csdn.net/zzwdkxx/article/details/30505305