我已經看過很多模式來顯示Qt上的控制檯消息。但是,是什麼區別它們之間:控制檯上的Qt應用程序文本流
- 使用iostream和std :: CIN
- 使用Qdebug
- 使用QTextStream
在什麼情況下是更好地使用每一個?
謝謝!
我已經看過很多模式來顯示Qt上的控制檯消息。但是,是什麼區別它們之間:控制檯上的Qt應用程序文本流
在什麼情況下是更好地使用每一個?
謝謝!
<iostream>
header和std::cout
(*)變量是標準C++庫的一部分,而不是Qt特定的特性。如果您在項目中使用其他基於非Qt的外部庫,則更有可能在這些庫中定義的類提供流操作符重載以及與這些C++流兼容的其他功能。例如,如果使用Boost Graph Library創建圖形對象,則可以輕鬆地將它的Graphviz表示打印到std::cout
流。
在另一方面,QTextStream
處理Qt的對象,特別是QString
,從而節省您不必之間std::string
我們char*
和QString
,反之亦然轉換。如果你的項目是以Qt爲中心的,或者只使用基於Qt的外部庫,那麼QTextStream
很可能會爲你節省一些工作。
另請注意,QTextStream
默認通過使用QTextCodec::codecForLocale()
來處理不同平臺上的某些區域設置和字符編碼。 std::cout
,相反,默認使用"C"
區域設置,並且在std::string
/char*
和系統編碼之間不進行編碼處理。因此,如果您正在開發需要編碼和區域識別功能的跨平臺系統,那麼使用QTextStream
可能會有所幫助,因爲您需要手動設置std::cout
,例如通過調用imbue()
方法執行這些轉換。
(*) - 請注意,std::cin
用於從控制檯讀取數據。 std::cout
用於標準輸出。 C++標準庫還爲錯誤輸出提供了std::cerr
,併爲日誌輸出提供了std::clog
。
你忘了QDebug部分。 QDebug在內部使用QTextStream。在IO設備上打開流是一個方便的類。使用它最簡單的方法是調用'qDebug()<< somestring'。您可以在QDebug上爲您的自定義類型定義'operator()<<'。 –