Ich habe eine GUI-Anwendung, deren Hauptteil ist ein QPlainTextEdit. Es wird verwendet, um ein Protokoll der Anwendung anzuzeigen, und somit wächst der zugehörige Text Zeile für Zeile ad infinitum.QPlainTextEdit truncate Geschichte zeilenweise
Da die Anwendung sehr lange laufen soll, muss ich den Speicher begrenzen, der für dieses Protokoll zugewiesen wird. Deshalb möchte ich einen maxNumLines
oder maxNumCharacters
Parameter haben, der sicherstellt, dass der Verlauf abgeschnitten wird, wenn er erreicht wird, d.h. die Kopfzeilen werden entfernt, wenn neue Zeilen angehängt werden (a.k.a. log rotation).
Um dies zu erreichen, finde ich die Funktionen
// get the associated text
QString toPlainText() const
// set the associated text
void setPlainText (const QString & text)
Deshalb so etwas wie dieser ungetestete Code tun würde wahrscheinlich den Trick:
QString &tmp = pte.toPlainText();
while (tmp.size() > maxNumCharacters) {
// remove lines from the head of the string until the desired size is reached
// removes nothing if "\n" could not be found
tmp.remove(0, tmp.indexOf("\n")+1);
}
pte.setPlainText(tmp);
Ist das der Weg, um die erste Zeile zu entfernen, zu gehen (s) aus der QPlainTextEdit
? Gibt es wahrscheinlich andere Qt Text GUI-Elemente, die besser zu dieser Aufgabe passen würden (eine maximale Anzahl von Zeilen festlegen und am Anfang der Liste abschneiden), z. zeige irgendwie eine QStringList
in der ich die Zeilen speichern könnte (s.t. könnte ich leicht erase(0)
)?
Oder implementiert QPlainTextEdit schließlich eine solche Obergrenze für die Größe des zugeordneten QString?
Dank für die gemeinsame Nutzung. Ich habe zuvor die cursorbasierte Einfügung verwendet, aber ich habe entdeckt, dass 'append *' -Methoden viel höhere Leistungen bieten. – AkiRoss