qobject_cast用法


官方文檔:

 

函數原型:

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM