1
QTextBrowser
を使用してシリアル端末プログラムを作成しようとしています。私はQTimer
をpaintEventを100msごとに呼び出すように設定し、シリアルポートで何かが受信された場合はQTextBrowser
ウィジェットに文字を表示します。QTextBrowserに最後にテキストを挿入する方法
私の問題は、私がクリックするたびに、カーソルが移動し、それ以降のすべてのui->tbOutput->insertPlainText(QString(buf));
にかかわらず、QTextBrowser
の半分だけが更新されるかのようにそれは、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);
}
}
}
ありがとうございます。あなたの答えは正しい軌道に乗りました。私はあなたの追加の考慮事項に同意し、私のコードでそれらを実装しました。 –