我需要将文本追加到QPlainTextEdit而不向文本添加换行符,但是appendPlainText()appendHtml()这两种方法实际上都添加了新段落。

我可以使用QTextCursor手动进行操作:

QTextCursor text_cursor = QTextCursor(my_plain_text_edit->document());
text_cursor.movePosition(QTextCursor::End);

text_cursor.insertText("string to append. ");

那行得通,但是如果在追加之前位于底部,我还需要保持底部滚动。

我试图从Qt的源代码中复制逻辑,但是我坚持了下来,因为实际上使用了QPlainTextEditPrivate类,没有它我就找不到做到这一点的方法:例如,我在verticalOffset()中看不到QPlainTextEdit方法。

实际上,这些资源包含许多奇怪的东西(至少乍看之下),我不知道如何实现。

这是append()的源代码:http://code.qt.io/cgit/qt/qt.git/tree/src/gui/widgets/qplaintextedit.cpp#n2763

最佳答案

我只引用在这里找到的内容:

http://www.jcjc-dev.com/2013/03/qt-48-appending-text-to-qtextedit.html

我们只需要将光标移至QTextEdit中内容的末尾并使用insertPlainText。在我的代码中,它看起来像这样:

myTextEdit->moveCursor (QTextCursor::End);
myTextEdit->insertPlainText (myString);
myTextEdit->moveCursor (QTextCursor::End);

就如此容易。如果您的应用程序需要在添加文本之前将光标保持在原处,则可以使用QTextCursor::position()QTextCursor::setPosition()方法,或者

只需在修改其位置[QTextCursor QTextEdit::textCursor()]并将其设置为光标[void QTextEdit::setTextCursor(const QTextCursor & cursor)]之前复制光标。

这是一个例子:
QTextCursor prev_cursor = myTextEdit->textCursor();
myTextEdit->moveCursor (QTextCursor::End);
myTextEdit->insertPlainText (myString);
myTextEdit->setTextCursor (&prev_cursor);

08-16 04:16