5

私のGuiにはQtの「テキスト編集」ウィジェットがあり、このウィジェットは何かを記録するために使用されます。この方法ですべての行を追加します。

QString str;
str = ...
widget.textEdit_console->append(str);

このようにして、テキスト編集の高さは、新しい行ごとにどんどん増えていきます。この場合、端末のように動作させたいのですが、(設定した) 行数を入力した後、新しい行ごとに、テキスト編集の最初の行が削除されて、大きすぎるのを防ぎます! 新しい行が入力されるたびにカウンターを使用し、カウンターが一番上に達した後に最初の行を削除するか、後でこれを自動的に行うより良い方法があります

widget.textEdit_console->append(str);

と呼ばれる?

4

3 に答える 3

2

アドバイスをくれたcmannett85に感謝しますが、何らかの理由で「テキスト編集」を好むので、この方法で問題を解決しました:

void mainWindow::appendLog(const QString &str)
{
    LogLines++;
    if (LogLines > maxLogLines)
    {
        QTextCursor tc = widget.textEdit_console->textCursor();
        tc.movePosition(QTextCursor::Start);
        tc.select(QTextCursor::LineUnderCursor);
        tc.removeSelectedText(); // this remove whole first line but not that '\n'
        tc.deleteChar(); // this way the first line will completely being removed
        LogLines--;
    }
    widget.textEdit_console->append(str);
}

「テキスト編集」を使用しているときに、より最適化されたより良い方法があるかどうかはまだわかりません

于 2013-04-14T15:32:13.407 に答える
0

このコードはカーソルを最初の行に移動し、行末まで選択し、次に行を削除します。

widget.textEdit->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
widget.textEdit->moveCursor(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
widget.textEdit->textCursor().deleteChar();
widget.textEdit->textCursor().deleteChar();
于 2013-04-14T15:32:55.660 に答える
0

簡単な方法の 1 つは、垂直スクロール バーをオフにすることです。

 textEdit_console->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
于 2013-04-14T10:18:16.160 に答える