QT QPlainText限制输出指定行,并不断将最旧的一行删去

文章介绍了如何使用QTQPlainText限制输出内容的行数,并在达到限制时自动删除最旧行。作者强调了在多线程环境下使用Mutex锁的重要性,以防止数据同步问题。同时,还提到调整滚动条位置以解决输出后空白的问题。
摘要由CSDN通过智能技术生成

QT QPlainText限制输出指定行,并不断将最旧的一行删去

实现其实非常简单,直接贴代码讲一下

void MainWindow::flushToOutput(int type, const QString &output)
{
    Mutex.lock();
    ui->plainText->insertPlainText(output + "\n"); // 每条数据分隔开来
    QTextDocument *doc = ui->plainText->document();
    if (doc->blockCount() > 500) {
        QTextCursor cursor(doc);
        cursor.movePosition(QTextCursor::Start);
        cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor, 1);
        cursor.removeSelectedText();
    }
    // 移动滚动条到最下面(原有的控件带有32行空,使图标无法移至末尾)
    ui->plainText->verticalScrollBar()->setSliderPosition(ui->plainText->verticalScrollBar()->maximum());

    Mutex.unlock();
}

下面细讲

QTextCursor cursor(doc);
cursor.movePosition(QTextCursor::Start);
cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor, 1);
cursor.removeSelectedText();

这一段是为了获取plaintext的内容指针,并将指针挪至头部,因为我们限制为500,从头部向下挪一行,删去选中的内容,即删去最久的一行。
最重要的其实是两个锁,在大量数据并行和串行(时间间隔很短)的情况下,锁能够使疯狂增加的数据不把你的程序搞崩。

ui->plainText->verticalScrollBar()->setSliderPosition(ui->plainText->verticalScrollBar()->maximum());

这一段是为了将滚动条挪到最底部,不知道为什么我的程序在输出后出现了一大段空白,我试了很多方法,最后用取巧的方法在后面加了一个-32,总算显示正常了,欢迎评论区指正,搞不明白

ui->plainText->verticalScrollBar()->setSliderPosition(ui->plainText->verticalScrollBar()->maximum()-32);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值