我见过很多在 Qt 上显示控制台消息的模式。但是,它们之间有什么区别:
- 使用 iostream 和 std::cin
- 使用Qdebug
- 使用QTextStream
分别在什么情况下使用效果更好?
谢谢!
最佳答案
<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"
locale 并且在 std::string
之间不进行编码处理/char*
和系统编码。因此,使用 QTextStream
如果您正在开发需要编码和区域设置感知的跨平台系统,可能会有所帮助,因为您需要手动设置 std::cout
通过调用 imbue()
进行这些转换方法,例如。
(*) - 注意 std::cin
用于从控制台读取。 std::cout
用于标准输出。 C++ 标准库还提供了std::cerr
用于错误输出和 std::clog
用于日志输出。
关于c++ - 控制台上的 Qt 应用程序文本流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648697/