QTextEdit文本编辑框的光标移动

1.问题描述

用Qt写一个串口调试工具,用一个QTextEdit作为接收显示区。发现每次串口调试工具接收完一帧数据后,QTextEdit的光标自动跳到文本开头的位置。这样,当接收到大量数据后,就要手动拉动滑块进行翻页,才能看到最新的数据。文本框赋值的方式为ui->QTextEdit->setText(),不是用的ui->QTextEdit->append()。实测发现,采用后者追加文本的方式,不存在这个问题。但是由于逻辑需要,必须要采用前一种方式,因此考虑手动设置光标位置,让光标每次都移动到文本末尾。


2.解决办法

调用QTextEdit类的成员函数“moveCursor”可以设置光标的位置。其函数原型如下:

void QTextEdit::moveCursor ( QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor )

其中,

参数operation是指定光标的操作类型,可选的值有:Up,Down,Left,Right,End,EndOfLine等等,分别对应不同的动作,这个很好理解。我们这里是想让光标移动到文本编辑框的末尾,因此选择参数End。

参数mode光从字面上的意思,可能不太容易知道它的作用。通过Qt自带的帮助文档,可以得到下面的信息:


同时,还有这样一句描述“If the anchor() is kept where it is and the position() is moved, the text in between will be selected”。通过这些信息,可以推测出,选择参数KeepAnchor的话,在光标移动的同时,会选中被光标掠过的文本,类似于鼠标的拖动动作。通过试验,验证了这个推测。下图是选择参数KeepAnchor的效果:



这里我们不想让文本被选中,所以选择了参数MoveAnchor。


3.总结

通过调用如下语句,可以将光标移动到文本末尾。其他类型的文本控件也是同理,不再赘述。

ui->QTextEdit_rx->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值