Qt中關於qDebug的使用

2021-09-21 02:25:06 字數 1847 閱讀 5135

在專案的開發中,當我們除錯程式時,最常用的就是列印資訊了,qt為我們提供了非常方便的列印資訊類qdebug。

大家應該已經很熟練的使用qdebug了,但也許有些地方並沒有注意到,下面小豆君就介紹一下qdebug的一些常用特性。

1 qdebug()的最常用法

我們可以使用qdebug像使用std::cout一樣,直接在重定向操作符(<<)後面加上我們的字串即可。

如:

qdebug() << "hello" << 123;
qdebug()還可以列印qt中的基本型別,例如qstring,qbytearray,qdate,qrectf,qvarianthash,qfont等等,關於qt中的基本型別,大家可以在幫助文件中搜尋關鍵字qmetatype,這裡就不列了。

如:

qdebug() << qstring("hello") << qpoint(10, 10);
以上的用法都必須包含標頭檔案qdebug

#include
2 不包含標頭檔案,直接使用qdebug()

一般的,每次我們使用qdebug()《時,都會要求包含標頭檔案qdebug。如果你是用習慣了c語言中的格式化輸出,那麼也可以像下面的做法來輸出列印資訊。

#include int main(int argc, char *ar**)

實際qdebug是包含在qlongging.h中的,因為我們的qt程式,一般都會包含qobject,所以這裡的標頭檔案包含了qobject,從而我們就不必要額外的再新增qdebug標頭檔案。

以上對於只列印字串等一些臨時性的基本型別資訊時,使用這種方法是非常有效的,但是,要記住qt所支援的基本型別是不可以列印的。

3 為自定義類新增qdebug()列印

如果我們想要使用qdebug列印自定義類中的資訊時就可以像以下這樣做:

#include class student

qstring getname() const

private:

qstring name;

};qdebug operator<<(qdebug debug, const student &c)

int main(int argc, char *ar**)

首先,自定義了乙個類student,編寫了建構函式和獲取姓名的獲取器。

其次,定義了"<<"操作符,列印名字。

最後,在main函式中建立student的例項,並用qdebug()列印該例項。

4 消除qdebug()列印

qdebug的列印資訊,主要是為了方便除錯程式時盡快找到bug,所以當我們在發布版本時,需要去掉debug列印,一方面可以加快我們程式的執行速度,另一方面可以減小我們程式的體積。

在我做的專案中有很多人是採用加注釋的方法來去掉列印的,雖然這個方法可行,但不是很有效的,如果哪天程式出了bug還需要再把列印資訊去掉注釋,這是很麻煩的。當然,將日誌分級也是個很不錯的想法。

為了解決這個問題,你只需要在你的pro檔案裡加上一行預定義巨集即可。

defines += qt_no_debug_output

在你的程式新增上這個巨集,重新編譯執行程式,看看你的列印資訊是不是都不見了呢,哈哈,這是不是很方便啊,qt就是這麼的懂你。

關於qdebug的知識點,熟練掌握以上的知識在我們的專案開發中基本上是夠用了。有興趣的同學,還可以檢視qwarning() qcritical() qfatal()這些函式,大概夠和qdebug()類似。

Qt中qDebug 的學習

1.qdebug 的幾種總結 1.include qdebug 字串 endl 2.include int num 20 char str 20 hello world qdebug 如果只寫在括號裡,是不需要qdebug標頭檔案的 d s num,str 3.class teacher qstri...

qt種qdebug字串 QT中的qDebug

首先在標頭檔案中包含 include 當開發者需要為乙個裝置 檔案 字串或者控制台,寫出除錯和跟蹤資訊時,該類被使用。在需要使用的地方插入 qdebug intensity d intensity 0 2 d表示整數 輸出結果 intensity 195 注 a,a 讀入乙個浮點值 僅c99有效 c...

qt中qDebug 無法輸出解決辦法

在除錯qt程式,無論是debug版本還是release版本,都會遇到此類問題,先將其總結在此。無論是標頭檔案還是原始檔中都有 include 程式中qdebug 的使用方法都正確 卻在輸出視窗中無法看到輸出的資訊。1.在工程檔案.pro的最後新增 config console 2.如果你的工程檔案中...