[gelöst] Streamausgabe an QTextEdit möglich?

Alles rund um die Programmierung mit Qt
Antworten
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

[gelöst] Streamausgabe an QTextEdit möglich?

Beitrag von bw1faeh0 »

Hallo Leute,

um mein Problem zu erläutern hole ich ein wenig weiter aus:

Ich habe eine Hardware die mir pro Sekunde ca. 400 Datentelegramme à 20 Byte schickt.
Diese Telegramme liest ein Thread in eine Liste ein (alle 10ms). Ein anderer Thread liest diese Daten aus, sortiert alle Telegramme und schickt jedes einzelne Telegramm als Signal an ein QWidget (alle 100ms). Somit werden alle 100ms ca. 40 Signals emitted, die jeweils ca. 20 Byte Daten beinhalten.
Diese Daten sollen in ein QTextEdit eingefügt werden, das in meinem QWidget sitzt. Dazu wird der QTextEdit::append()-Slot genutzt.

Nun habe ich während des Testens bemerkt, dass meine Anwendung die Daten nicht korrekt ausgibt (ich kenne die Testdaten der Hardware) und nach einer Weile reproduzierbar abstürtzt. Dabei stellt sich nicht die Frage, ob die Anwendung abstürtzt, sondern WANN.

Wenn die Anwendung auf dem Bildschirm sehr klein ist, sprich das QTextEdit nur wenig Platz auf dem Bildschirm hat, und somit nur wenig Zeilen darstellen kann, stürtzt die Anwendung deutlich später ab, als wenn die Anwendung maximiert wurde und das QTextedit fast den gesamten Bildschirm einnimmt.

Dies hat mich stutzig gemacht. Also habe ich die Zeile QTextEdit::Append(data) auskommentiert. Die Anwendung arbeitet weiterhin alle Routinen ab, formatiert alle Daten weiterhin (Tabulatoren, Einfügen von Leerzeichen, Umwandlung in Hex). Lediglich die letztendliche Ausgabe der formatierten Strings erfolgt nicht.
Statt dessen schreibe ich die Daten mittels eines QTextStreams in eine Datei auf der Festplatte.
Und siehe da: Die Anwendung arbeitet stabil und ohne Probleme. Die Daten in der Datei sind alle korrekt und entsprechen den Testdaten die die Hardware generiert.

Ich habe die Vermutung, dass die ca. 40 Signals die den Slot QTextEdit::Append() erreichen fast gleichzeitig versuchen in das Textfeld zu schreiben. Dies könnte auf der einen Seite die falschen Daten (wirre Reihenfolge) und auf der anderen Seite den Absturtz erklären.

Was sagt ihr dazu?

Wie gesagt, was mir zu denken gibt ist, dass wenn ich die Daten in eine Datei speichere, alles wunderbar läuft:

Code: Alles auswählen

	// Stürtzt nach kurzer Zeit ab
	dataArea->append(outputString);

	// Läuft stabil
	QTextStream out(tempFile);
	out << outputString;
Kann man den Schreibzugriff auf das QTextEdit mittels Mutex exklusiv verwalten?
Kann man den Schreibzugriff auf das QTextEdit mittels eines Streams sequentiell machen?

Ideen? Vermutungen? Hinweise?

Dankö!!

Grüße

Christian
Zuletzt geändert von bw1faeh0 am 9. November 2007 10:37, insgesamt 2-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Unwahrscheinlich - Signals werden in der Reihenfolge abgearbeitet wie sie eingehen.
Ich würde mal versuchen die Daten zu puffern - d.h. nur alle 0,x Sekunden wirklich eine Ausgabe zu machen - kann eh keiner so schnell lesen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

Ich habe es jetzt erstmal mit eine QListView gelöst. Dabei habe ich keine Abstürtze ;)
Antworten