Qt/Qt v4 Logging Fenster/Ausgabe eines Streams
Qt/Qt v4 Logging Fenster/Ausgabe eines Streams
Hat jemand Hints/Tips/refs/RTFM/As wenn es darum geht wie man ein Log/Debug Fenster mit Qt4 am elegantesten implementiert. Mein erster Ansatz aus der Hüfte herraus wäre gewesen die QTextEdit Klasse abzuleiten, sie auf read-only zu setzen, uU den Texttyp auf Qt::LogText und dann damit arbeiten. Aber so trivial ist das gar nicht und `logging'-Funktionalität ist doch für beinahe alle Applikationen substantiell. Gibt es da Klassen die ich bisher übersehen habe und die einem helfen könnten so etwas simpel zu realisieren? Wie wird das gängig gemacht? Wie sieht die Praxis aus?
Danke im Vorraus.
Danke im Vorraus.
QMessageBox
Vielleicht reicht dir das ja schon...
http://doc.trolltech.com/4.0/qmessagebox.html
HENNING
Vielleicht reicht dir das ja schon...
http://doc.trolltech.com/4.0/qmessagebox.html
HENNING
ich glaube du hast mich oben falsch verstande. ich will keine msgbox, sondern ein fenster auf den *dauernd* log msgs eintrudeln.klogg hat geschrieben:QMessageBox
Vielleicht reicht dir das ja schon...
http://doc.trolltech.com/4.0/qmessagebox.html
HENNING
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
So etwas habe ich selbst mal realisiert, in dem ich eine LogKlasse geschrieben habe,
in der sämtliche Funktionalität über statische Funktionen
(z.B. Festlegen einer Datei (bei dir Fenster), Schreiben von Text)
bereitgestellt wurde, so dass ich überall einfach nur die Klasse includen musste,
um LogEinträge anlegen zu können. Ein Objekt der Klasse gab es nicht.
Ungefähr so: LogKlasse::addLog(QString("Feldlänge = %1").arg(size));
Das wurde dann inklusive aktueller Zeit in eine festgelegte Datei geschrieben.
Ob das jetzt üblich oder elegant ist weiß ich nicht,
aber funktioniert hat's ganz prima.
HENNING
in der sämtliche Funktionalität über statische Funktionen
(z.B. Festlegen einer Datei (bei dir Fenster), Schreiben von Text)
bereitgestellt wurde, so dass ich überall einfach nur die Klasse includen musste,
um LogEinträge anlegen zu können. Ein Objekt der Klasse gab es nicht.
Ungefähr so: LogKlasse::addLog(QString("Feldlänge = %1").arg(size));
Das wurde dann inklusive aktueller Zeit in eine festgelegte Datei geschrieben.
Ob das jetzt üblich oder elegant ist weiß ich nicht,
aber funktioniert hat's ganz prima.
HENNING
Das TextEdit Widget scheint aber nicht perfekt zu sein wenn es um größer Logs geht. In meinem Fall werden einige tausend Zeilen Text gelogt. Diese werden derzeit über QTextEdit->append(QString) angehängt. Das Widget hat drops eingeschaltet und ist readonly.
Leider gibt es einen massiven Leistungseinbruch bei großen Textmengen. Jeder Klick der zum Neuzeichnen des TextEdits führt ist extrem langsam. Ich vermute mal das es daran liegt, das es keinen "Überlauf" gibt. Daher bei mehr als 500Zeilen sollten alte Zeilen gelöscht werden.
Wie macht man das am schlausten?
Mit TextEdit: wie bekomme ich die alten Zeilen gelöscht?
Oder ein anderes Widget?
Leider gibt es einen massiven Leistungseinbruch bei großen Textmengen. Jeder Klick der zum Neuzeichnen des TextEdits führt ist extrem langsam. Ich vermute mal das es daran liegt, das es keinen "Überlauf" gibt. Daher bei mehr als 500Zeilen sollten alte Zeilen gelöscht werden.
Wie macht man das am schlausten?
Mit TextEdit: wie bekomme ich die alten Zeilen gelöscht?
Oder ein anderes Widget?
Ich hab das, wovon du sprichst, mal mit einem QListWidget realisiert.
Richtext ausgeschaltet? Ich würde es auch ehr mit einem QListWidget probieren. Jede Zeile ein neues Item und sobald es mehr als n werden, schmeißt Du die ersten wieder weg. Keine Ahnung wie schnell das ist, wirst Du dann sehen.Psychodad hat geschrieben:Das TextEdit Widget scheint aber nicht perfekt zu sein wenn es um größer Logs geht.