我需要从程序中手动删除QTextEdit中的特定行(NoWrap选项处于活动状态)。我找到了一个解释如何删除第一行的解决方案,但我想知道如何在特定索引处删除整行。
我在这里找到了一个解决方案Remove a line/block from QTextEdit,但我不知道这些块是什么。它们是否代表单行?我应该遍历这些块,如果我在给定索引处达到块,那么删除它吗?
答案 0 :(得分:7)
您可以使用以下内容删除lineNumer
处的行
QTextCursor cursor = textEdit->textCursor();
cursor.movePosition(QTextCursor::Start);
cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, lineNumer);
cursor.select(QTextCursor::LineUnderCursor);
cursor.removeSelectedText();
textEdit->setTextCursor(cursor);
在这里,您将光标放在文档的开头,向下移动lineNumer
次,选择特定的行并将其删除。
答案 1 :(得分:2)
您可以执行以下操作:
QTextEdit te;
// Three lines in the text edit
te.setText("Line 1\nLine 2\nLine 3");
const int lineToDelete = 1; // To delete the second line.
QTextBlock b = te.document()->findBlockByLineNumber(lineToDelete);
if (b.isValid()) {
QTextCursor cursor(b);
cursor.select(QTextCursor::BlockUnderCursor);
cursor.removeSelectedText();
}
答案 2 :(得分:1)
我知道这个问题已经被接受,并且在这里已经相当死了,但是我谨在QTextEdit
中提出自己的经验,以警告以后的人们。
我的问题空间与OP相似,因为我想从文本编辑中删除一行。我在这里遵循给定的解决方案,对其进行了一些改进,最终相信我找到了成功。
但是,只有在查看文本编辑时,或者在整个程序过程中它至少出现在屏幕上一次,才能实现这种成功。尽管我无法确认这一点,但我相信这与光标操作有关。
这里有更深入的解释:
我希望在UI
和与之通信的远程单元之间创建一条消息历史记录。消息将以颜色编码,其中一个用于UI
的已发送消息,另一个用于已接收的消息。为了防止大量的内存影响,我们的想法是将行数限制为特定数量,例如1000
。
我的原始代码很像被接受的答案:
但是,一段时间后,我开始注意到程序的运行时执行速度变慢。在加入debug之后,我发现,只要我实际上没有查看文本发送到的位置,行限制器就不会真正擦除行。文本发送到的QTextEdit
在选项卡式小部件中。这意味着我必须循环浏览该选项卡,否则该算法将无法正常工作。
这里是 my 问题空间的有效解决方案:
void ScrollingEdit::append(QString text, QColor color)
{
QString pc = QString("<body style=\"color:rgb(%1,%2,%3);\">").
arg(color.red()).arg(color.green()).arg(color.blue());
QString ac = QString("</body>");
text.prepend( pc );
text.append( ac );
mText.append( text );
QString delim = "</body>";
if ( mText.count( delim ) > mMaxLine )
{
mText.remove(0, mText.indexOf( delim ) + delim.size() );
}
mEdit->clear();
mEdit->setHtml( mText );
QTextCursor cursor = mEdit->textCursor();
cursor.movePosition( QTextCursor::End );
mEdit->setTextCursor(cursor);
mEdit->ensureCursorVisible();
}
其中mText
是成员变量QString
,充当文本编辑的“模型”,mMaxLine
是用户可配置的int
,用于设置最大数量mEdit
是UI
QTextEdit
。请注意,光标操作仍然存在,但重要的是用户正在查看元素。