Изменить последнюю строку в QTextBrowser

у меня есть QTextBrowser который отображает строки QString и Int, Сообщения выглядят примерно так:

Сообщение счетчик 1

Сообщение счетчик 2

Сообщение счетчик 3

Счетчик сообщений 1

Вместо того, чтобы всегда добавлять новую строку для каждого увеличения счетчика, я хочу просто увеличить Int в последнем сообщении (последняя строка). Какой самый эффективный способ сделать это?

Я придумал этот код, чтобы удалить только последнюю строку в QTextBrowser:

ui->outputText->append(messageA + QString::number(counter));
ui->outputText->moveCursor( QTextCursor::End, QTextCursor::MoveAnchor );
ui->outputText->moveCursor( QTextCursor::StartOfLine, QTextCursor::MoveAnchor );
ui->outputText->moveCursor( QTextCursor::End, QTextCursor::KeepAnchor );
ui->outputText->textCursor().removeSelectedText();
ui->outputText->append(messageA + QString::number(++counter));

К сожалению, после удаления последней строки у меня остается пустая строка, которая выглядит очень некрасиво. Каков наилучший способ достичь этого, который не включает очистку всего QTextBroswerи добавление каждой строки снова.

1

Решение

Вот мое решение, но учтите, что для сборки и запуска требуется как минимум C ++ 11 и Qt 5.4. Тем не менее, концепция заключается в том, что вы можете копировать и вставлять без использования QTimer требуя тех версий выше:

main.cpp

#include <QApplication>
#include <QTextBrowser>
#include <QTextCursor>
#include <QTimer>

int main(int argc, char **argv)
{
QApplication application(argc, argv);
int count = 1;
QString string = QStringLiteral("Message a counter %1");
QTextBrowser *textBrowser = new QTextBrowser();
textBrowser->setText(string.arg(count));
QTimer::singleShot(2000, [textBrowser, string, &count](){
QTextCursor storeCursorPos = textBrowser->textCursor();
textBrowser->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
textBrowser->moveCursor(QTextCursor::StartOfLine, QTextCursor::MoveAnchor);
textBrowser->moveCursor(QTextCursor::End, QTextCursor::KeepAnchor);
textBrowser->textCursor().removeSelectedText();
textBrowser->textCursor().deletePreviousChar();
textBrowser->setTextCursor(storeCursorPos);
textBrowser->append(string.arg(++count));
});
textBrowser->show();
return application.exec();
}

main.pro

TEMPLATE = app
TARGET = main
QT += widgets
CONFIG += c++11
SOURCES += main.cpp

Построить и запустить

qmake && make && ./main
5

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


По вопросам рекламы [email protected]