c++ - 控制台上的 Qt 应用程序文本流

标签 c++ qt console

我见过很多在 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/

相关文章:

c++ - 将 C++ 结果保存为二进制文件供以后使用

c++ - 检查浮点参数是否正确

c++ - 程序错误 "error C3861: ' copyString' : identifier not found", 请告诉我为什么?

Python控制台不显示函数的输出

c# - 在 C# 窗口中运行 C/C++ 控制台应用程序?

c++ - 将属性表制作为 MDI 子项

c++ - 从类的 QList 访问 protected 成员,例如 QList<Account*>

c++ - 使用 QString 或字符串调用结构对象

c++ - 是否有免费的 C++ xsl-fo 转 PDF 引擎?

javascript - JS while 循环不会在 true 处停止