我已经看到很多模式在Qt上显示控制台消息。但是,他们之间有什么不同:
在哪种情况下最好使用每一个?
谢谢!
答案 0 :(得分:2)
<iostream>
标头和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
。