carriage return wird zu linefeed durch QTextEdit

Alles rund um die Programmierung mit Qt
Antworten
StefanQtNutzer
Beiträge: 12
Registriert: 1. Dezember 2010 11:54

carriage return wird zu linefeed durch QTextEdit

Beitrag 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?
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag 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.
StefanQtNutzer
Beiträge: 12
Registriert: 1. Dezember 2010 11:54

Beitrag 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?
StefanQtNutzer
Beiträge: 12
Registriert: 1. Dezember 2010 11:54

Beitrag von StefanQtNutzer »

Ok ich habs getestet es liegt an dem QString!

Kann ich die Umwandlung deaktivieren?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
StefanQtNutzer
Beiträge: 12
Registriert: 1. Dezember 2010 11:54

Beitrag 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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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!
StefanQtNutzer
Beiträge: 12
Registriert: 1. Dezember 2010 11:54

Beitrag 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
Antworten