QTextCursor的一些用法

本文介绍了使用QTextEdit时遇到的问题及解决方案,包括如何正确处理文本选择状态、确保文本操作按预期进行,以及如何设置只读属性并始终将光标定位在文本末尾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.  if (!currentTextCursor.hasSelection()) {
  2.             currentTextCursor.insertText("**" + tr("Boldface") + "**");
  3.             currentTextCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 2);
  4.             currentTextCursor.movePosition(QTextCursor::WordLeft, QTextCursor::KeepAnchor, 1);
  5.             currentTextEdit->setTextCursor(currentTextCursor);
  6.         } else {
  7.             currentTextCursor.insertText("**" + currentTextCursor.selectedText() + "**");
  8.         }

问题:

如果光标没有 选中文字,就插入文本**Boldface**,并且选中其中的Boldface,如果 已经选中有文字,则在文字的左右两边分别加上**,问题是这样的
在第一次选中的文字文字之后,当我在QTextEdit中单击后,理论上是选中的 文字被清空,也就是hasSelection()应该返回false,但实际上hasSelection()还是true,并且我用qDebug()测试 了之后,确实还是刚才选中的文字,难道还需要对单击事件做处理吗,不知道表述的清不清楚,请各位不吝指教,谢谢


问题已经解决 ,原因是没有更新QTextCursor,也就是说在每次使 用QTextCursor时,需要将现在QTextEdit的光标再传递给QTextCursor,我以前是把QTextCursor当作一个类内全局变 量用了,以为自己会更新的,所以会出现上述问题,也就说,每次使用QTextCursor,需要如下动作:

  1. QTextCursor currentTextCursor = currentTextEdit->textCursor();

问题:

想用QTextEdit做一个程序执行状态的显示窗口。
设置了readOnly属性。结果有两个问题:
1.在程序执行过程中去翻看前面的 信息,如果不把光标(虽然光标看不见)定位到最后一行,就会从翻看的位置打印信息。有没有把光标定位到最后的API?

解决:

QTextCursor cursor = this->textCursor();
if(!cursor.atEnd())
{
cursor.movePosition(QTextCursor::End,QTextCursor::MoveAnchor,1);
this->setTextCursor(cursor);
}
cursor.insertText(str);

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值