Seite 1 von 1
carriage return wird zu linefeed durch QTextEdit
Verfasst: 2. Dezember 2010 07:10
von StefanQtNutzer
Der QString "Hallo \r" wird an die Klasse QTextEdit mittels `setplainTExt` übergeben.
Wird der Text mittels `toplainText` an iene QString-Variable übergeben, ist der Inhalt der Variablen "Hallo \n".
Warum?
Verfasst: 2. Dezember 2010 07:14
von kater
Bei einem Linux System?
Der Zeilenumbruch bei einem Linuxsystem ist nur \n. Bei Windows kommt noch \r hinzu. Wie auch bei std::string scheint es eine automatische Umwandlung zu geben.
Verfasst: 2. Dezember 2010 07:21
von StefanQtNutzer
Die Anwendung läuft auf einem Windows-Rechner.
Also liegt das Problem nicht bei der QTextEdit-Klasse sondern, bei der zuweisung an eine QString-Variable?
Verfasst: 2. Dezember 2010 07:23
von StefanQtNutzer
Ok ich habs getestet es liegt an dem QString!
Kann ich die Umwandlung deaktivieren?
Verfasst: 2. Dezember 2010 07:57
von Christian81
Ein QTextEdit ist ein, wie der Name schon sagt TextEdit. Ein Text hat unter Windows nunmal ein anderes LineEnding als unter Linux.
Wenn Du plain Daten brauchst musste Du mit QByteArray arbeiten.
Verfasst: 2. Dezember 2010 09:31
von StefanQtNutzer
Also gibt es keine Möglichkeit aus
QtextEdit SendData;
SendData->setPlainText("Hallo\r");
mittels toPlainText()
("Hallo\r") wieder herauszubekommen?
Allerdings sollte es doch gerade Funktionieren, weil die Anwendung doch auf einem Windows-Rechner läuft.
DOS -> \r\n
LINUX ->\n
soiwe Kater bereits erwähnte.
Verfasst: 2. Dezember 2010 11:38
von solarix
StefanQtNutzer hat geschrieben:
Allerdings sollte es doch gerade Funktionieren, weil die Anwendung doch auf einem Windows-Rechner läuft.
...
soiwe Kater bereits erwähnte.
Da hast du dir jetzt gleich selbst widersprochen: wenn es unter Windows wie kater erwähnte laufen würde, würdest du kein '\r' erhalten, sondern ein "\r\n"...
Ok ich habs getestet es liegt an dem QString!
Ich auch.. aber das da liefert mir keine Umwandlung:
Code: Alles auswählen
qDebug() << "Test1";
QString s = "\n";
for (int i=0; i<s.length(); i++)
qDebug() << (int)s.at(i).toAscii();
qDebug() << "Test2";
s = "\r";
for (int i=0; i<s.length(); i++)
qDebug() << (int)s.at(i).toAscii();
qDebug() << "Test3";
s = "\r\n";
for (int i=0; i<s.length(); i++)
qDebug() << (int)s.at(i).toAscii();
Ich gehe davon aus, dass QtextEdit ein internes Format hat.. darauf deutet ja auch "setPlainText(..)", was eigentlich soviel wie "Füttere-QTextEdit-mit-anderen-Daten-als-intern-benutzt-wird" bedeutet (sonst hätten die Entwickler die Methode "setText(..)" genannt...
Aber im Grunde sollte doch das kein Problem sein.. eine gute, robuste Applikation trennt solche Dinge voneinander. Das eine ist eine Anzeige, das andere ein (serielles?) Protokoll. Wenn ich dich wäre, würde ich für das Protokoll eine eigene Klasse entwerfen, welche z.B. eine "send()"-Methode besitzt. Die kann dann garantieren, dass der zu versendeten String protokoll-konform ist.. so in etwa:
Code: Alles auswählen
QByteArray sendData = data.trimmed().toAscii() + '\r';
hth!
Verfasst: 2. Dezember 2010 11:53
von StefanQtNutzer
nun mir muß eine Fehler im String-Test unterlaufen sein.
Bei mir gibts es doch keine Umwandlung auf Basis des QStrings.
sondern doch durch die QtextEdit:
Erwartet habe ich das ich folgendes erhalte:
a)
QtextEdit SendData;
SendData->setPlainText("Hallo\r");
mittels toPlainText()
erwartete Ausgabe: "Hallo\r"
tatsächliche Ausgabe "Hallo\n"
b)
QtextEdit SendData;
SendData->setPlainText("Hallo\r\n");
mittels toPlainText()
erwartete Ausgabe: "Hallo\r\n"
tatsächliche Ausgabe "Hallo\n"
c)
QtextEdit SendData;
SendData->setPlainText("Hallo\r");
mittels toPlainText()
erwartete Ausgabe: "Hallo\n\r"
tatsächliche Ausgabe "Hallo\n\n"
Wie du sagst, Anzeige und Ausgabe werde ich nun separat behandeln.
Danke an alle