使用 QTextCursor 选择一段文本
Selecting a piece of text using QTextCursor
在使用Qt框架选择文本片段时遇到问题。例如,如果我有这个文档:"没有时间休息"。我想选择"ime for r"并从文档中删除这段文本,我应该如何使用 QTextCursor?这是我的代码:
QTextCursor *cursor = new QTextCursor(ui->plainTextEdit->document());
cursor->setPosition(StartPos,QTextCursor::MoveAnchor);
cursor->setPosition(EndPos,QTextCursor::KeepAnchor);
cursor->select(QTextCursor::LineUnderCursor);
cursor->clearSelection();
不幸的是,它从文本中删除了整行。我尝试使用其他选择类型,如WordUnderCursor或BlockUnderCursor,但没有结果。或者也许有更好的方法可以做到这一点?提前谢谢。
代码中存在几个问题:
-
cursor->select(QTextCursor::LineUnderCursor);
行选择整个当前行。你不想删除整行,那你为什么要写这个?删除此行代码。 -
clearSelection()
只是取消选择所有内容。请改用removeSelectedText()
。 - 不要使用
new
创建QTextCursor
。这是正确的,但不是必需的。应尽可能避免使用指针。QTextCursor
通常通过值或引用传递。您也可以使用QPlainTextEdit::textCursor
获取编辑光标的副本。
因此,代码应如下所示:
QTextCursor cursor = ui->plainTextEdit->textCursor();
cursor.setPosition(StartPos, QTextCursor::MoveAnchor);
cursor.setPosition(EndPos, QTextCursor::KeepAnchor);
cursor.removeSelectedText();
您正在清除选择,而不是基于您的愿望的字符。
请阅读该方法的文档:
void QTextCursor::clearSelection()
通过将锚点设置为光标位置来清除当前所选内容。
请注意,它不会删除所选内容的文本。
您可以看到它只删除了所选内容,而不是文本。请改用以下方法:
void QTextCursor::removeSelectedText()
如果有选定内容,则删除其内容;否则不执行任何操作。
在讨论了这个理论之后,让我们演示一下你可以写什么:
QTextCursor *cursor = new QTextCursor(ui->plainTextEdit->document());
cursor->setPosition(StartPos,QTextCursor::MoveAnchor);
cursor->setPosition(EndPos,QTextCursor::KeepAnchor);
// If any, this should be block selection
cursor->select(QTextCursor::BlockUnderCursor);
cursor->removeSelectedText();
^^^^^^^^^^^^^^^^^^
相关文章:
- 在做一段时间内检查字符的无限循环
- 如何为一段代码启用 -permissive
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 使用Qt Creator在调试模式下编译一段代码
- ::grpc::ServerReaderWriter 对象在另一个线程中一段时间后无法调用
- 一段时间后 CPU 使用率高
- 有没有办法在一段时间后将流程从流出中分离出来
- 无法理解一段具有完美转发和省略号的C++代码
- 在一段时间内更改标签文本
- 布尔函数在一段时间内不起作用
- 防止一段代码在协程中并发执行
- 埃拉托色尼的筛子在一段上
- 解决PNP在一段时间后返回坏的rvec和tvec
- 相机的旋转方向在一段时间后反转
- boost::asio::d eadline_timer 1ms 滞后一段时间
- 使用 QTextCursor 选择一段文本
- C++.从文本文件读取.每隔一段就缺失一次
- EM_EXGETSEL与文本选择顺序无关.如何确定一段选定文本中的插入符号位置
- 将一段文本加载到字符串向量中