【问题标题】:Qt app text stream on console控制台上的 Qt 应用程序文本流
【发布时间】:2014-03-25 23:47:36
【问题描述】:

我见过很多在 Qt 上显示控制台消息的模式。但是,它们之间有什么区别:

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

在什么情况下使用每一个更好?

谢谢!

【问题讨论】:

    标签: c++ qt console


    【解决方案1】:

    <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 部分。 QDebug 在内部使用 QTextStream。它是在 IO 设备上打开流的便利类。最简单的使用方法是调用qDebug() << somestring。您可以在 QDebug 上为您的自定义类型定义 operator()<<
    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多