2016-09-16 95 views
2

我在Linux和一個完整的初學者中使用Qt框架。當我們使用QString打印時,爲什麼會出現雙引號?

當我打印一個簡單的信息,如:

qDebug() << "Hello World"; 

在控制檯輸出是Hello World

但如果我喜歡打印相同的消息:

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

在控制檯輸出爲"Hello World"(注意引號),如何獲得使用QString相同的輸出?

+5

可能重複:http://stackoverflow.com/questions/27976581/why-is-qstring-printed-with-quotation-marks – Hayt

+1

這是QString的實現方式。如果你想刪除「」,考慮使用std :: string,或者可能使用QByteArray。 –

回答

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

你可以找到的Qt源代碼的答案(在下面的鏈接實現的細節): https://code.woboq.org/qt5/qtbase/src/corelib/io/qdebug.h.html

你有< <操作

從Qt的源代碼的幾個定義:

/*! \ FN QDebug & QDebug ::運算< <(常量字符* S)

寫入 「\ 0'終止字符串s,到流和返回參考 到流中。該字符串從未被引用或轉換爲 輸出,但請注意,某些QDebug後端可能不是8位清理。

//! \ FN QDebug & QDebug ::運算< <(常量的QString & S)

寫入字符串,\ A S,到流和返回到所述流的引用。 通常,QDebug會在引號內打印字符串,並將 不可打印的字符轉換爲其Unicode值(\ u1234)。要在不進行轉換的情況下打印 不可打印字符,請啓用noquote() 功能。請注意,某些QDebug後端可能不是8位的 clean。輸出示例:\ code QString s; s =「a」; qDebug()。noquote() < < s; //打印:一個qDebug()< < s; //打印:「a」s =「\」a \ r \ n \「」; qDebug()< < s; //打印:「\」a \ r \ n \「」s =「\ 033」; //轉義字符 qDebug()< < s; //打印:「\ u001B」s =「\ u00AD」; // SOFT HYPHEN qDebug()< < s; //打印:「\ u00AD」s =「\ u00E1」; //拉丁小寫字母 A急性qDebug()< < s; //打印:「á」s =「a \ u0301」; //「a」 其次是組合急性ACCENT qDebug()< < s; //打印:「aÌ」; s = 「\ u0430 \ u0301」; // CYRILLIC小寫字母A後面加上組合急性 ACCENT qDebug()< < s; //輸出: 「d°√」 \ endcode */

qDebug()< <的 「Hello World」 使用QDebug & QDebug ::運算< <(爲const char * S),而不是QDebug & QDebug: :運營商< <(常量QString & s)這就是爲什麼你在一個版本而不是其他的報價。在QString版本

qDebug().noquote() << s; 

+0

您發佈的代碼不是Qt的源代碼,它來自[docs](https://doc.qt.io/qt-5/qdebug.html#operator-lt-lt-13)。答案應該包含一個鏈接(和選項的解釋),而不是Qt源代碼中的註釋。 – Mike

+1

你忘了添加解決方案,只顯示解釋。 – RvdK

+0

解決方案在最後! qDebug()。noquote()<< s; – basslo

相關問題