2014-03-25 46 views
1

我已經看過很多模式來顯示Qt上的控制檯消息。但是,是什麼區別它們之間:控制檯上的Qt應用程序文本流

  • 使用iostream和std :: CIN
  • 使用Qdebug
  • 使用QTextStream

在什麼情況下是更好地使用每一個?

謝謝!

回答

2

<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

+0

你忘了QDebug部分。 QDebug在內部使用QTextStream。在IO設備上打開流是一個方便的類。使用它最簡單的方法是調用'qDebug()<< somestring'。您可以在QDebug上爲您的自定義類型定義'operator()<<'。 –

相關問題