[英]how does qtDebug() syntax work
這是qt文檔中提供的qDebug()的替代語法。
qDebug()<<“ Brush:” << myQBrush <<“ Other value:” << i;
“ <<”運算符在這里做什么? 他們是否將字符串放入函數中? 它是在c ++語法中允許還是僅在Qt中工作(因為文檔也談到了QtDebugMsg)
具有這種語法(帶有空括號的qDebug
),它將返回 QDebug
對象,該對象的operator<<
重載,並且每次操作員完成操作時,它都會返回對QDebug
對象的引用,以便您可以鏈接操作。
qDebug
是一個宏,定義為:
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
因此,如果您編寫qDebug
它將被上面的行替換,但是QMessageLogger::debug
是一個函數,而不是一個字段,因此您不能以這種方式訪問它。 顯然,使用函數的正確方法是在其上添加()
。 因此,我們編寫了qDebug()
並在宏得到擴展后得到:
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug()
這意味着:創建一個QMessageLogger
類型的臨時對象,並在其上調用debug
方法。 什么是debug
方法? 它是: QDebug debug() const;
。 因此, qDebug()
行為我們提供了QDebug
類型的臨時對象。
然后在這個臨時對象上,我們調用一個operator<<
(將使用哪個取決於參數類型)。
這是一個流運算符。
輸出流對標准類型使用插入(<<)運算符。 您也可以為自己的類重載<<操作符。
這是MSDN文檔: https : //msdn.microsoft.com/zh-cn/library/1z2f6c2k.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.