Seite 1 von 2

Probleme mit QTextEdit->setPlainText

Verfasst: 7. Dezember 2010 16:22
von Melle_87
Hallo!
Ich habe ein Problem bei der Ausgabe in einem QTextEdit.
Ich möchte mittels setPlainText() ein einfaches Char-Array (char ar[15000])
in einem QTextEdit ausgeben.
Jetzt habe ich das Problem, dass im QTextEdit Linefeeds angezeigt werden obwohl keine im Array vorhanden sind. Diese Linefeeds tauchen auch immer nach den selben Zeichenreihen auf.
Ist vielleicht irgendein Problem bekannt, das das QTextEdit oder die Methode setPlainText() haben?
Ich hoffe, dass mir irgendjemand einen Tip geben kann.

Grüße Melle_87

Verfasst: 7. Dezember 2010 16:29
von franzf
In welchem Zeichensatz ist den char-Array codiert? Hilft dir da eine der QString::fromXYZ()-Methoden?
Kannst du dir die Daten nicht gleich in nem QString speichern?

Zeig evtl. auch mal etwas Code (wenn du mit den obigen Vorschlägen nicht sowieso schon am Ziel bist).

Verfasst: 7. Dezember 2010 16:32
von Melle_87
Das Char-Array ist ASCII.
Macht es für das QTextEdit einen Unterschied ob die Daten QString oder einem Char-Array stehen? Die Ausgabe dürfte das doch eigentlich nicht interessieren oder?

Verfasst: 7. Dezember 2010 16:32
von Giesbert
Probiers mal mit:

char myarray[15000];
// fill array
pTextEdit->setPlainText(QLatin1Char(myarray));
dann sollte es gehen, oder?

Verfasst: 7. Dezember 2010 16:35
von Melle_87
Habe deinen Vorschlag gleich mal ausprobiert.
Bekomme dann aber eine Fehlermeldung:
error C2440: '<function-style-cast>': 'char [10001]' kann nicht in 'QLatin1Char' konvertiert werden

Ach so, mir ist aufgefallen, dass mein Array nicht 15000 Bytes hat, sondern 10001. Aber das sollte ja eigentlich keine Rolle spielen...

Verfasst: 7. Dezember 2010 16:36
von Giesbert
Oder probier QString::fromLatin1 oder fromaSCII mal aus

Verfasst: 7. Dezember 2010 16:41
von franzf
oder from Local8Bit() ;)

Verfasst: 7. Dezember 2010 16:41
von Giesbert
Sorry, ich meine QLatin1String nicht char :-(

QTextEdit* pTextEdit = new QTextEdit(this);

char myarray[10001];
::memset(myarray, 0, sizeof(myarray));
// fill array
pTextEdit->setPlainText(QLatin1String(myarray));


das sollte gehen

Verfasst: 7. Dezember 2010 16:47
von Melle_87
Also auch mit QLatin1String() verschwinden diese Linefeeds nicht... :(
QString werde ich nicht verwenden, wegen Unicode. Aber ich kann es ja mal noch mit QByteArray ausprobieren.
Oder habt ihr vielleicht sonst noch eine Idee?

Verfasst: 7. Dezember 2010 16:48
von franzf
Im Endeffekt läuft das aber auf

Code: Alles auswählen

edit->setPlainText(QString::fromLatin1(myarray));
hinaus läuft, nur über den Umweg myarray -> QLatin1String -> QString::Qstring(const QLatin1String)

Verfasst: 7. Dezember 2010 16:52
von Melle_87
Ach so. Ja stimmt.
Na dann wird mich das auch nicht wirklich weiterhelfen....
Ich habe leider keine Idee mehr woran das liegen könnte.
Ich kann mir nur vorstellen, dass die Funktion setPlainText() vllt. fehlerhaft ist....

Verfasst: 7. Dezember 2010 16:54
von franzf
Melle_87 hat geschrieben:Also auch mit QLatin1String() verschwinden diese Linefeeds nicht... :(
Kannst du mal skizzieren, wie die Daten in das Array kommen?
QString werde ich nicht verwenden, wegen Unicode.
Am Ende landet im TextEdit aber wieder ein QString, das ist die klar? Wenn du jetzt selber gleich QString einsetzt, nutzt du das implicit Sharing von Qt, wodurch du am Ende sogar weniger Speicher brauchst, als über ein eigenes char-Array.

Verfasst: 7. Dezember 2010 16:54
von Christian81
setPlainText ist hier wohl der letzte den ich als fehlerhaft bezeichnen würde... wer weiß was da für Steuerzeichen drin sind welche dann als LineFeed interpretiert werden... minimal kompilierbares Beispiel und wir werden sehen was falsch ist.

Verfasst: 7. Dezember 2010 17:08
von Giesbert
Hi,

ich denke auch, das non printable Characters drinnen sind. Das führt zu netten ausgaben.

Verfasst: 8. Dezember 2010 08:23
von Melle_87
Non printable characters hört sich eigentlich gut an.
Die Linefeeds tauchen oft auch nach folgenden Zeichenreihen auf:
\C- und \C|
Ich konnte aber bisher nichts finden, dass es sich dabei um non printable characters handelt.

Wenn ich den Inhalt des QTextEdits in einen Editor kopiere sind die Linefeeds nicht mehr vorhanden. Es wird alles am Stück ausgegeben. Auch wenn ich mir die Hex-Werte ansehe, kann ich keine CRs oder LFs entdecken.