2016-09-16 2 views
2

Ich benutze Qt Framework in Linux und einen kompletten Anfänger.Warum gibt es doppelte Anführungszeichen, wenn wir mit QString drucken?

Wenn ich eine einfache Nachricht aus wie:

qDebug() << "Hello World"; 

in der Konsole die Ausgabe Hello World ist.

Aber wenn ich die gleiche Meldung aus wie:

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

in der Konsole die Ausgabe "Hello World", (Man beachte die Anführungszeichen), wie die gleiche Leistung QString mit bekommen?

+5

Mögliche Duplizieren: http://stackoverflow.com/questions/27976581/why-is-qstring-printed-with-quotation-marks – Hayt

+1

Dies ist wie QString implementiert ist. Wenn Sie das "" entfernen möchten, sollten Sie eine std :: string verwenden oder möglicherweise ein QByteArray verwenden. –

Antwort

3

Siehe QDebug::noquote

Deaktiviert das automatische Einfügen von Zitatzeichen um QChar, QString und QByteArray Inhalte und liefert eine Referenz zum Strom.

Wenn die Angebotserstellung deaktiviert ist, werden diese Typen ohne Anführungszeichen und ohne das Umgehen nicht druckbarer Zeichen gedruckt.

Diese Funktion wurde in Qt 5.4 eingeführt.

Verbrauch:

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

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

1

Sie die Antwort in dem Qt-Quellcode (Detail der Umsetzung in dem Link unten) finden: https://code.woboq.org/qt5/qtbase/src/corelib/io/qdebug.h.html

Sie haben mehrere Definitionen des < < Operators

von Qt-Quellcode:

/*! \ Fn qDebug & qDebug :: operator < < (const char * s)

Schreibt die ‚\ 0'-terminierte Zeichenkette s, auf den Strom und liefert eine Referenz auf den Strom. Die Zeichenfolge wird nie in die -Ausgabe zitiert oder umgewandelt, aber beachten Sie, dass einige QDebug-Backends möglicherweise nicht 8-Bit-sauber sind.

//! \ Fn qDebug & qDebug :: operator < < (const QString & s)

die Zeichenfolge Schreibt, \ a s, auf den Strom und einen Verweis auf den Strom zurückkehrt. Normalerweise druckt QDebug die Zeichenfolge in Anführungszeichen und transformiert nicht druckbare Zeichen in ihre Unicode-Werte (\ u1234). Um nicht druckbare Zeichen ohne Umwandlung zu drucken, aktivieren Sie die Funktion noquote() . Beachten Sie, dass einige QDebug-Backends möglicherweise nicht 8-bit sauber sind. Ausgabe Beispiele: \ code QString s; s = "a"; qDebug().noquote() < < s; // druckt: a qDebug() < < s; // druckt: "a" s = "\" a \ r \ n \ ""; qDebug() < < s; // druckt: "\" a \ r \ n \ "" s = "\ 033"; // Escape-Zeichen qDebug() < < s; // druckt: "\ u001B" s = "\ u00AD"; // SOFTHYPHEN qDebug() < < s; // druckt: "\ u00AD" s = "\ u00E1"; // LATIN SMALL LETTER A MIT AKUTE qDebug() < < s; // druckt: "Á" = "a \ u0301"; // "a" gefolgt von KOMBINIEREN ACUTE ACCENT qDebug() < < s; // druckt: "aÌ"; s = "\ u0430 \ u0301"; // CYRILLIC SMALL LETTER A gefolgt von COMBINING ACUTE ACCENT qDebug() < < s; // Ausgabe: "Ð ° Ì" \ endcode */

qDebug() < < "Hallo Welt" verwendet qDebug & qDebug :: operator < < (const char * s) und qDebug & qDebug nicht: : operator < < (const QString & s), deshalb erhalten Sie die Angebote in einer Version und nicht in der anderen. können Sie das gleiche Ergebnis erhalten, indem Sie:

qDebug().noquote() << s; 

auf der QString Version

+0

Der Code, den Sie gepostet haben, ist kein Quellcode von Qt, sondern stammt von [docs] (https://doc.qt.io/qt-5/qdebug.html#operator-lt-lt-13). Die Antwort sollte einen Link (und eine Erklärung der Optionen) enthalten und nicht die Kommentare im Quellcode von Qt. – Mike

+1

Sie haben vergessen, die Lösung hinzuzufügen, Sie zeigten nur die Erklärung. – RvdK

+0

Die Lösung ist am Ende! qDebug(). noquote() < basslo

Verwandte Themen