【发布时间】:2014-03-25 23:47:36
【问题描述】:
我见过很多在 Qt 上显示控制台消息的模式。但是,它们之间有什么区别:
- 使用 iostream 和 std::cin
- 使用 Qdebug
- 使用 QTextStream
在什么情况下使用每一个更好?
谢谢!
【问题讨论】:
我见过很多在 Qt 上显示控制台消息的模式。但是,它们之间有什么区别:
在什么情况下使用每一个更好?
谢谢!
【问题讨论】:
<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 用于日志输出。
【讨论】:
qDebug() << somestring。您可以在 QDebug 上为您的自定义类型定义 operator()<<。