У меня есть виджет Qt «Редактирование текста» в моем графическом интерфейсе, и этот виджет используется для записи чего-либо.
Я добавляю каждую строку (и) таким образом:
QString str;
str = ...
widget.textEdit_console->append(str);
таким образом, высота редактирования текста будет увеличиваться после каждой новой строки.
В этом случае я хочу, чтобы он действовал как терминал, я имею в виду, что после некоторого числа (которое я установил) строк, введенных для каждой новой строки, удаляется первая строка редактирования текста, чтобы она не была слишком большой!
использовать счетчик с каждой новой введенной строкой и удалять первые после того, как счетчик достиг своей вершины, или есть лучший способ сделать это автоматически после
widget.textEdit_console->append(str);
называется ?
поблагодарить 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);
}
Я до сих пор не знаю, есть ли лучший, более оптимизированный способ при использовании «Редактирования текста»
Один простой способ — отключить вертикальную полосу прокрутки:
textEdit_console->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
Этот код перемещает курсор на первую строку и затем выбирает его до конца строки, затем он удалит строку:
widget.textEdit->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
widget.textEdit->moveCursor(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
widget.textEdit->textCursor().deleteChar();
widget.textEdit->textCursor().deleteChar();