我正在尝试通过QTextBrowser
显示来自串行端口的传入数据来制作串行终端程序。我设置了QTimer
每 100 毫秒调用一次paintEvent,QTextBrowser
如果在串行端口上收到任何内容,则在小部件上显示字符。
我的问题是,每次我在 中间单击 say 时QTextBrowser
,就好像光标移动了,然后在所有后续 上ui->tbOutput->insertPlainText(QString(buf));
,只有一半QTextBrowser
得到更新。
当我单击QTextBrowser
小部件的底部时,整体QTextBrowser
再次更新。
这是我拥有的代码,在其他各种文章中,我尝试滚动到底部,并将文本光标移动到末尾,但它并没有达到我想要的效果。
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
static char buf[10240];
if (terminal->serialport.bytesAvailable() > 0)
{
// sizeof(buf)-1 so that there is space for zero termination character
qint64 numread = terminal->serialport.read(buf,sizeof(buf)-1);
if ((numread > 0) && (numread < sizeof(buf)))
{
buf[numread] = 0; // set zero termination
ui->tbOutput->insertPlainText(QString(buf));
ui->tbOutput->verticalScrollBar()->setValue(
ui->tbOutput->verticalScrollBar()->maximum());
ui->tbOutput->textCursor().setPosition(QTextCursor::End);
}
}
}