我需要将文本追加到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);