Qt应用程序文本流在控制台上

时间:2014-03-25 23:47:37

标签: c++ qt console

我已经看到很多模式在Qt上显示控制台消息。但是,他们之间有什么不同:

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

在哪种情况下最好使用每一个?

谢谢!

1 个答案:

答案 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