Leider werden manchmal recht viele Aktionen pro Sekunde ausgeführt, so dass das gesamte Hauptprogramm hängt (für mehrere Sekunden).
Die Ursache vermute ich im Parsing des QtextBrowsers.
Ursprünglich sah der Code so aus:
Code: Alles auswählen
text.append(newText);
qDebug() << "vor " << QDateTime::currentDateTime().toString("z");
ui->textBrowser->setText(text);
qDebug() << "nach " << QDateTime::currentDateTime().toString("z");
Besser wurde es, als ich die Methode insertHtml verwendet habe. Es dauerte somit nur noch 50ms, da der neue Text an der stelle des Cursors eingefügt wird, und nicht der gesamte Text geparst wird.
Code: Alles auswählen
qDebug() << "vor " << QDateTime::currentDateTime().toString("z");
ui->textBrowser->insertHtml(newText);
qDebug() << "nach " << QDateTime::currentDateTime().toString("z");
Meine nächste Idee war, die Logging-Klasse in einen eigenen Thread zu packen. Leider ist sie ein QWidget und somit nicht in einenThread verschiebbar.
Fehlermeldung des Compilers:
Noch eine Idee: Konsolenfenster zum Loggen verwenden.QObject::moveToThread: Widgets cannot be moved to a new thread
Endlich gibt es keine Performance-Probleme mehr.
Aber dafür folgende Nachteile, jedenfalls habe ich keine Lösungen bisher gefunden:
- Konsolenfenster startet immer mit dem Hauptprogramm
- Konsolenfenster nur ausschaltbar, indem man es im Project-File herausnimmt und neu kompiliert
- keine farbigen Schriftarten
Habt Ihr Ideen, wie man das noch lösen könnte?