2016-12-20 5 views
0

Was ist falsch an diesem Code? (In einer Qt-Umgebung wollte ich den QTextStream verwenden, aber die resultierende -Zeichenfolge ist leer. Mit der Zeichenfolge funktioniert der Code OK. BTW: Gibt es einen bestimmten Grund, warum Qt direkt häufig verwendete Vorlagen wie Vektor und Zeichenfolge nicht unterstützt?)QTextStream bietet eine leere Zeichenfolge

QString MyFileName; 
    QTextStream ts; 
    ts << DirName.c_str() 
     << QDate::currentDate().toString("_yyyy_MM_dd.log").toStdString().c_str() 
     << " (" << ++VolumeNumber << ")"; 
    ts >> MyFileName; 
    string FileName= MyFileName.toStdString(); 

Mit Standard-Stream ist es viel einfacher:

ostringstream oss; 
    oss << DirName.c_str() << QDate::currentDate().toString("_yyyy_MM_dd.log").toStdString().c_str() << " (" << ++VolumeNumber << ")"; 
    FileName= oss.str(); 

Was ist der Vorteil des Qt-Ansatzes ist?

+0

In Bezug auf Ihre Frage ist 'QTextStream' nicht das richtige Werkzeug für das, was Sie wollen. Es geht darum, Text zu serialisieren (normalerweise in Datei), während das, was Sie wollen, leicht als ein Liner mit 'QString' auf sich selbst erreichbar ist. – Resurrection

+0

Die 'toStdString() .c_str()' macht keinen Sinn im Kontext von 'QTextStream' btw. Sie können den 'QString', der das Ergebnis von' QDate :: currentDate(). ToString (....) 'ist, direkt pipen. – E4z9

Antwort

0

Dies liegt daran, dass Sie kein Gerät QTextStream zuweisen. Es funktioniert auf QIODevice (Sie können auch QString verwenden, intern wird von QTextStream durch QBuffer Proxy weitergeleitet werden), so dass es nichts tut. Sie tun sollten:

QString buffer; 
QTextStream ts(&buffer); 

nachdem Sie die Daten eingegeben das Gerät am Ende ist so eingestellt, das Lesen von es Sie leere Zeichenfolge gibt, so dass ein anderer Fehler ist. Um davon zu lesen, müssten Sie das Gerät zurücksetzen mit:

, die das zugrunde liegende Gerät an den Anfang verschieben wird. Wenn es ein Gerät mit wahlfreiem Zugriff ist, können Sie seek an bestimmten Ort und starten Sie dort.

Noch was Sie wollen, wird nicht funktionieren, weil Sie etwas anderes serialisieren als Sie versuchen, deserialize (alle oben genannten Probleme nicht zu widerstehen). Sie sollten die Zeichenfolge, die Sie serialisieren, zuerst erstellen, mit QTextStream serialisieren und sie erneut deserialisieren.

Verwandte Themen