Qt Text Edit с фиксированным количеством строк ввода

У меня есть виджет Qt «Редактирование текста» в моем графическом интерфейсе, и этот виджет используется для записи чего-либо.
Я добавляю каждую строку (и) таким образом:

QString str;
str = ...
widget.textEdit_console->append(str);

таким образом, высота редактирования текста будет увеличиваться после каждой новой строки.
В этом случае я хочу, чтобы он действовал как терминал, я имею в виду, что после некоторого числа (которое я установил) строк, введенных для каждой новой строки, удаляется первая строка редактирования текста, чтобы она не была слишком большой!
использовать счетчик с каждой новой введенной строкой и удалять первые после того, как счетчик достиг своей вершины, или есть лучший способ сделать это автоматически после

widget.textEdit_console->append(str);

называется ?

5

Решение

поблагодарить cmannett85 по вашему совету, но по какой-то причине я предпочитаю «Редактирование текста»,
Я решил свою проблему следующим образом:

void mainWindow::appendLog(const QString &str)
{
LogLines++;
if (LogLines > maxLogLines)
{
QTextCursor tc = widget.textEdit_console->textCursor();
tc.movePosition(QTextCursor::Start);
tc.select(QTextCursor::LineUnderCursor);
tc.removeSelectedText(); // this remove whole first line but not that '\n'
tc.deleteChar(); // this way the first line will completely being removed
LogLines--;
}
widget.textEdit_console->append(str);
}

Я до сих пор не знаю, есть ли лучший, более оптимизированный способ при использовании «Редактирования текста»

2

Другие решения

Один простой способ — отключить вертикальную полосу прокрутки:

 textEdit_console->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
0

Этот код перемещает курсор на первую строку и затем выбирает его до конца строки, затем он удалит строку:

widget.textEdit->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
widget.textEdit->moveCursor(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
widget.textEdit->textCursor().deleteChar();
widget.textEdit->textCursor().deleteChar();
0
По вопросам рекламы [email protected]