Probleme mit QTextEdit->setPlainText

Alles rund um die Programmierung mit Qt
Melle_87
Beiträge: 31
Registriert: 1. Dezember 2010 12:41

Probleme mit QTextEdit->setPlainText

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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).
Melle_87
Beiträge: 31
Registriert: 1. Dezember 2010 12:41

Beitrag 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?
Giesbert
Beiträge: 33
Registriert: 16. Oktober 2009 00:50
Wohnort: Hessdorf bei Erlangen
Kontaktdaten:

Beitrag von Giesbert »

Probiers mal mit:

char myarray[15000];
// fill array
pTextEdit->setPlainText(QLatin1Char(myarray));
dann sollte es gehen, oder?
Melle_87
Beiträge: 31
Registriert: 1. Dezember 2010 12:41

Beitrag 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...
Giesbert
Beiträge: 33
Registriert: 16. Oktober 2009 00:50
Wohnort: Hessdorf bei Erlangen
Kontaktdaten:

Beitrag von Giesbert »

Oder probier QString::fromLatin1 oder fromaSCII mal aus
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

oder from Local8Bit() ;)
Giesbert
Beiträge: 33
Registriert: 16. Oktober 2009 00:50
Wohnort: Hessdorf bei Erlangen
Kontaktdaten:

Beitrag 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
Melle_87
Beiträge: 31
Registriert: 1. Dezember 2010 12:41

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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)
Melle_87
Beiträge: 31
Registriert: 1. Dezember 2010 12:41

Beitrag 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....
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

'Funktioniert nicht' ist keine Fehlerbeschreibung
Giesbert
Beiträge: 33
Registriert: 16. Oktober 2009 00:50
Wohnort: Hessdorf bei Erlangen
Kontaktdaten:

Beitrag von Giesbert »

Hi,

ich denke auch, das non printable Characters drinnen sind. Das führt zu netten ausgaben.
Melle_87
Beiträge: 31
Registriert: 1. Dezember 2010 12:41

Beitrag 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.
Zuletzt geändert von Melle_87 am 8. Dezember 2010 08:55, insgesamt 2-mal geändert.
Antworten