当前位置:   article > 正文

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

pyqt plaintext 删除单行

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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

下面细讲

QTextCursor cursor(doc);
cursor.movePosition(QTextCursor::Start);
cursor.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor, 1);
cursor.removeSelectedText();
  • 1
  • 2
  • 3
  • 4

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

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

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

ui->plainText->verticalScrollBar()->setSliderPosition(ui->plainText->verticalScrollBar()->maximum()-32);
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/652679
推荐阅读
相关标签
  

闽ICP备14008679号