QTextEdit删除给定位置的整行
QTextEdit delete whole line at given position
我需要从程序中手动从QTextEdit中删除特定行(NoWrap选项处于活动状态)。我找到了一个解释如何删除第一行的解决方案,但我想知道如何删除特定索引处的整行。
我也在这里找到了一个解决方案 从QTextEdit中删除一行/块 ,但我不知道这些块是什么。它们是否代表单行?我应该遍历这些块,如果我在给定索引处到达块,则删除它吗?
您可以使用以下命令删除lineNumer
处的行:
QTextCursor cursor = textEdit->textCursor();
cursor.movePosition(QTextCursor::Start);
cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, lineNumer);
cursor.select(QTextCursor::LineUnderCursor);
cursor.removeSelectedText();
cursor.deleteChar(); // clean up new line
textEdit->setTextCursor(cursor);
在这里,您将光标放在文档的开头,向下移动lineNumer
次,选择特定行并将其删除。
您可以执行以下操作:
QTextEdit te;
// Three lines in the text edit
te.setText("Line 1nLine 2nLine 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();
}
这个问题已经被接受,而且它在这里已经相当死了,但我将把我对QTextEdit
的经验作为对后面的人的警告。
我的问题空间与OP相似,因为我想从文本编辑中删除一行。 我遵循这里给出的解决方案,稍微改进一下,最终相信我找到了成功。
然而,这种成功只有在查看文本编辑时才能实现,或者在整个程序过程中至少在屏幕上出现过一次。 虽然我无法确认这一点,但我相信这与光标操作有关。
这里有一个更深入的解释:
我希望在UI
和与之交谈的远程设备之间创建消息历史记录。 这些消息将被颜色编码,一个用于UI
发送的消息,另一个用于接收的消息。 为了防止巨大的内存影响,这个想法是将行数限制在特定数量,比如1000
。
我的原始代码很像公认的答案:
- 如果行数超过我的设定值,请将光标移动到开头并删除第一行。
然而,一段时间后,我开始注意到程序运行时执行速度变慢。 添加调试后,我发现,只要我没有实际查看文本发送到的位置,限行器就永远不会真正删除这些行。 文本发送到的QTextEdit
位于选项卡式小部件中。 这意味着我必须循环到该选项卡,否则算法将不起作用。
这是我的问题空间的工作解决方案:
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
。 请注意,光标操作仍然存在,但在重要的地方,即用户查看元素时。
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 是与初始类同一内存位置的重新定位类
- 如何在使用网格布局时重叠qwidgets,并将重叠的widget定位在距离窗口边界特定距离的位置
- 我不知道如何定位最高随机数的位置
- 如何在MFC上设置窗口位置以将其定位到屏幕顶部
- 将QGraphicsSvgItem的中心定位在一个位置上。
- 如何定位WinRT异步方法调用中出现错误的位置
- 重定位表项在平面二进制文件中的存储位置