qDebug 學習小結

2021-07-04 19:03:13 字數 2274 閱讀 9213

在qtcentre中看到有網友問這樣乙個問題:

why this doesn't work? 

qdebug() << "test" << std::endl;

在qt中用了二三年c++了,還真沒想過c++中的這麼乙個簡單的語句是怎麼工作的:

std::endl 是乙個模板函式的函式指標

template basic_ostream& endl ( basic_ostream& os );
看看gcc中的具體實現

templateinline basic_ostream<_chart, _traits>& 

endl(basic_ostream<_chart, _traits>& __os)

<<   原本是移位操作符,毫無疑問這兒是過載以後的:

typedef basic_ostream<_chart, _traits> __ostream_type;

__ostream_type&

operator<<(__ostream_type& (*__pf)(__ostream_type&))

這樣以來我們就是它是怎麼工作的了。也知道下面兩個也就等價了

std::cout除此之外,還有一些帶引數的 manipulator,比如:

std::cout《這又是神馬東西(反正不像是函式指標了)?

inline _setw

setw(int __n)

; }

struct _setw ;
templateinline basic_ostream<_chart, _traits>& 

operator<<(basic_ostream<_chart, _traits>& __os, _setw __f)

void qdebug(const char *, ...);

qdebug qdebug();

#ifdef qt_no_debug_output

# define qdebug while(false)qdebug

#endif

qinstallmsghandler 設定的是乙個靜態的函式指標變數(handler):

typedef void (*qtmsghandler)(qtmsgtype, const char *);

static qtmsghandler handler = 0;

qtmsghandler qinstallmsghandler(qtmsghandler h)

qdebug 和這個東西是怎麼聯絡上的?

void qdebug(const char *msg, ...)

static void qt_message(qtmsgtype msgtype, const char *msg, va_list ap)

void qt_message_output(qtmsgtype msgtype, const char *buf)

else

...

我們似乎很少(fix me)直接使用這個類,一般都是通過qdebug()生成乙個物件來使用

qdebug qdebug()
有意思的一點:這樣使用時,只有當qdebug析構時,才會將內容輸出(看到前面提到的qt_message_output了吧?):

inline ~qdebug() 

delete stream;

}}

流操作符

同一開始提到的c++標準庫中的流操作符一樣,在這兒我們也可以使用不帶引數的和帶引數的流操作符(注意endl和std::endl的區別):

qdebug()return *this;

}inline qdebug &operator<<(qtextstreammanipulator m)

typedef qtextstream & (*qtextstreamfunction)(qtextstream &);

class qtextstreammanipulator

;

qdebug::space()等

qdebug的三個成員函式看manual總覺得暈乎乎的,看**就很直觀了

class qdebug

inline qdebug &nospace()

inline qdebug &maybespace()

from: 

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...

qDebug使用方法

首先在標頭檔案中包含 include 在需要使用的地方插入 qdebug x d x 輸出結果 x 0 注 a,a 讀入乙個浮點值 僅c99有效 c 讀入乙個字元 d 讀入十進位制整數 i 讀入十進位制,八進位制,十六進製制整數 o 讀入八進位制整數 x,x 讀入十六進製制整數 s 讀入乙個字串,遇...

qdebug使用方法

qdebug使用方法 首先在標頭檔案中包含 include 在需要使用的地方插入 qdebug intensity d intensity 0 2 d表示整數 輸出結果 intensity 195 注 a,a 讀入乙個浮點值 僅c99有效 c 讀入乙個字元 d 讀入十進位制整數 i 讀入十進位制,八...