当我们使用QString打印时,为什么会出现双引号?

时间:2016-09-16 09:00:58

标签: qt

我在Linux中使用Qt框架并且是一个完整的初学者。

当我打印一条简单的信息时:

qDebug() << "Hello World";

在控制台中,输出为Hello World

但是,如果我打印相同的消息,如:

QString str = "Hello World";
qDebug() << str;

在控制台中输出为"Hello World"(注意引号),如何使用QString获得相同的输出?

2 个答案:

答案 0 :(得分:3)

请参阅QDebug::noquote

  

禁止在QChar,QString和QByteArray内容周围自动插入引号字符,并返回对该流的引用。

     

如果禁用引用,则会打印这些类型而不使用引号字符,也不会转义不可打印的字符。

     

该功能在Qt 5.4中引入。

用法:

QString str = "Hello World";
qDebug().noquote() << str;

http://doc.qt.io/qt-5/qdebug.html#noquote

答案 1 :(得分:1)

您可以在Qt源代码中找到答案(以下链接中的实施细节): https://code.woboq.org/qt5/qtbase/src/corelib/io/qdebug.h.html

你有&lt;&lt;&lt;&lt;&lt;&lt;&lt;操作

来自Qt源代码:

  

/ *! \ fn QDebug&amp; QDebug :: operator&lt;&lt;(const char * s)

     

写道   '\ 0' - 终止字符串s,返回流并返回引用   到溪边。该字符串从未被引用或转换为   输出,但请注意,一些QDebug后端可能不是8位清理。

     

/ / ! \ fn QDebug&amp; QDebug :: operator&lt;&lt;(const QString&amp; s)

     

将字符串\ a s写入流并返回对流的引用。   通常,QDebug在引号和变换内打印字符串   不可打印的字符到其Unicode值(\ u1234)。打印   不转换的不可打印字符,启用noquote()   功能。请注意,某些QDebug后端可能不是8位   清洁。输出示例:\ code QString s; s =“a”; qDebug()。noquote()   &LT;&LT; S; //打印:qDebug()&lt;&lt; S; //打印:“a”s =“\”a \ r \ n \“”;   qDebug()&lt;&lt; S; //打印:“\”a \ r \ n \“”s =“\ 033”; //转义字符   qDebug()&lt;&lt; S; //打印:“\ u001B”s =“\ u00AD”; // SOFT HYPHEN   qDebug()&lt;&lt; S; //打印:“\ u00AD”s =“\ u00E1”; //拉丁文小写字母   A ACUTE qDebug()&lt;&lt; S; //打印:“¡”s =“a \ u0301”; // “一个”   然后是COMBINING ACUTE ACCENT qDebug()&lt;&lt; S; //打印:“aÌ”; s =   “\ u0430 \ u0301”; // CYRILLIC SMALL LETTER A,然后是COMBINING ACUTE   ACCENT qDebug()&lt;&lt; S; //打印:“а̔\ endcode   * /

qDebug()&LT;&LT; “hello world”使用QDebug&amp; QDebug :: operator&lt;&lt;(const char * s)而不是QDebug&amp; QDebug :: operator&lt;&lt;(const QString&amp; s)这就是为什么你在一个版本中获得引号的原因不是另一个。 您可以使用以下方法获得相同的结果:

 qDebug().noquote() << s;
<{1}}版本

上的