2

我有一个QTextBrowser显示行QString和一个Int. 消息看起来像这样:

留言柜台1

留言柜台2

留言柜台 3

消息 b 计数器 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并再次附加每一行。

4

1 回答 1

6

这是我的解决方案,但请注意,它至少需要 C++11 和 Qt 5.4 才能构建和运行。但是,您可以在不使用QTimer上述版本的情况下复制和粘贴的概念:

主文件

#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();
}

主程序

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

构建并运行

qmake && make && ./main
于 2014-12-29T14:07:19.623 回答