請不要錯誤地假設qDebug,qWarning,qCritical和qFatal總是登錄標準錯誤。這絕對不是這種情況。
實際目標因Qt配置和目標操作系統而異。另外,5.4引入了一些行爲變化。請參閱here和here進行討論。
TL; DR:
Qt的> = 5.4:
- 如果你想隨時登錄stderr上,該
QT_LOGGING_TO_CONSOLE
環境變量設置爲1
。
- 如果您不想登錄stderr,則
QT_LOGGING_TO_CONSOLE
環境變量爲0
(這將強制通過本機系統記錄器進行記錄)。
- 如果
QT_LOGGING_TO_CONSOLE
環境變量未設置爲,那麼是否記錄到控制檯取決於應用程序是在TTY中運行(在UNIX上)還是在Windows上有控制檯窗口。
Qt的< 5.4,情況更加混亂。
- 如果Qt已經構建並支持特定的日誌框架(例如SLOG2,journald,Android日誌等))然後日誌記錄總是去那個框架
- 否則在UNIX上它去stderr
- 否則在Windows上OutputDebugString或stderr取決於應用程序是否是控制檯應用程序。
5.4之前的方法存在的問題是,如果Qt是使用日誌支持構建的,則在Unix IDE下f.i.不會捕獲應用程序的調試輸出。這是因爲輸出到了日誌記錄,而不是到IDE。在5.4中,這種方法在各種操作系統中變得更加靈活和統一。
這是因爲你說除了QT_LOGGING_TO_CONSOLE似乎使用Qt 5.3.2(由ArchLinux的作爲包裝) – Mildred 2014-10-30 09:32:22
也許拱向後移植補丁的工作?看到這個錯誤報告https://bugs.archlinux.org/task/40583討論 – peppe 2014-10-30 18:07:42
我只找到這對Arch Linux的論壇在別處找到了答案後,但得到的答覆是完美的。我的問題是更多的「爲什麼qDebug()停止去安慰升級後的Qt(過去5.3)?」這個線程應該從一堆其他的stackoverflow問題中引用。 – Dan 2017-06-05 20:34:50