• 7690阅读
  • 6回复

TextEdit中跳转到指定行的解决方案 [复制链接]

上一主题 下一主题
离线fantalin
 
只看楼主 倒序阅读 楼主  发表于: 2009-03-20
前段时间,自己在论坛上问过一个在TextEdit中跳转到指定行的问题。无人作答。
现在自己找到了办法,和大家分享一下。希望不要再为这个小问题困扰了,节省开发时间。

解决代码:
void textEdit::gotoline( int line )
{
  QTextCursor tc = textCursor();
    int position = document()->findBlockByNumber ( line-1 ).position();
    tc.setPosition(position,QTextCursor::MoveAnchor);
    setTextCursor( tc );
}

说明:
首先,要得到 一个鼠标指针对象:QTextCursor tc = textCursor();
然后利用QTextCursor的setPosition函数设置鼠标指针的位置。
这里的position是指整个文件流的位置坐标,如何定位到行呢?以前也被这个问题困扰

解决的办法是:利用QTextBlock这类。可以理解为块数据,因为文件中的Block是以换行符分割,所以可以看成是文件的一行。
那么利用QTextDocument的findBlockByNumber 函数就可以得到你指定的行了,接下来用position函数得到这一行在文件流中的位置坐标
最后,tc.setPosition,然后别忘了把鼠标设置为有效setTextCursor( tc );
跳转到行就实现了。

如果利用好QTextCursor 和QTextBlock这两个类,还可以实现很多文本编辑的功能。希望大家多多查看他们的相关资料。
离线linxy

只看该作者 1楼 发表于: 2009-03-22
不错,支持支持,
离线robertkun

只看该作者 2楼 发表于: 2009-07-22
DING
                                              简单的生活使人快乐!
离线mercedechf

只看该作者 3楼 发表于: 2010-04-26
但是该怎么根据鼠标位置确定line是多少呢?
离线linxy

只看该作者 4楼 发表于: 2011-03-31
回 3楼(mercedechf) 的帖子
blockNumber()
离线wuyue
只看该作者 5楼 发表于: 2011-04-03
非常感谢,今天我自己摸索了整整一天都没弄出来,弄来弄去也都只能跳到那一行,但是光标却没跟着跳过来!! -_-!
离线83888788
只看该作者 6楼 发表于: 2011-04-04
顶楼主啊~!
快速回复
限100 字节
 
上一个 下一个