Mam aplikację GUI, której główną częścią jest QPlainTextEdit. Służy do wyświetlania dziennika aplikacji i jako taki powiązany tekst rośnie linia po linii w nieskończoność.QPlainTextEdit truncate history linewise
Ponieważ aplikacja ma działać bardzo długo, muszę ograniczyć ilość pamięci, która zostanie przydzielona dla tego dziennika. Dlatego chcę mieć pewien parametr, który zapewni, że historia zostanie obcięta po osiągnięciu, tj. Linie nagłówkowe zostaną usunięte, gdy dodawane są nowe linie (a.k.a. obrót dziennika).
Aby to osiągnąć znalazłem z funkcji
// get the associated text
QString toPlainText() const
// set the associated text
void setPlainText (const QString & text)
Dlatego coś takiego kodu nietestowanego prawdopodobnie rade:
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);
Jest to do zrobienia, aby usunąć pierwszą linię (s) z QPlainTextEdit
? Czy są prawdopodobnie inne elementy GUI Qt Text, które lepiej pasują do tego zadania (ustaw maksymalną liczbę linii i obetnij na początku listy), np. jakoś wyświetlić QStringList
, w którym mogłem przechowywać linie (s.t. Mogłem łatwo erase(0)
)?
A może QPlainTextEdit ostatecznie implementuje taką górną granicę dla rozmiaru skojarzonego QStringa?
Dzięki za dzielenie się. Poprzednio używałem wstawiania opartego na kursorach, ale odkryłem, że metody 'append *' zapewniają znacznie lepsze wyniki. – AkiRoss