赞
踩
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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。