700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 文本编辑器实现光标定位的功能

文本编辑器实现光标定位的功能

时间:2020-12-28 10:01:31

相关推荐

文本编辑器实现光标定位的功能

文章目录

1 文本编辑器实现光标定位的功能

1 文本编辑器实现光标定位的功能

问题:如何计算编辑框中光标的位置?

思路:

文本框对象的内部包含了QTextCursor对象。通过position()成员函数获取当前光标的字符位置。根据光标的字符位置计算横纵坐标。当光标位置发生变化时进行计算。

算法流程描述:

思想:

通过’\n’字符的个数计算所在行。通过最后一个’\n’字符的下标计算所在行。

关键代码如下:

bool MainWindow::initMainEditor(){bool ret = true;mainEditor.setParent(this);connect(&mainEditor, SIGNAL(textChanged()), this, SLOT(onTextChanged()));connect(&mainEditor, SIGNAL(copyAvailable(bool)), this, SLOT(onCopyAvailable(bool)));connect(&mainEditor, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool)));connect(&mainEditor, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool)));connect(&mainEditor, SIGNAL(cursorPositionChanged()), this, SLOT(onCursorPositionChanged()));setCentralWidget(&mainEditor);return ret;}void MainWindow::onCursorPositionChanged(){int pos = mainEditor.textCursor().position();// 注意,这里的返回的位置从0开始,比如当前有输入框内有字符abc,光标停在a前面返回0,a后面返回1,b后面返回2,c后面返回3QString text = mainEditor.toPlainText();int col = 0;int ln = 0;int flag = -1;for(int i=0; i<pos; i++){if( text[i] == '\n' ){ln++;flag = i;}}flag++;col = pos - flag;statusLbl.setText("Ln: " + QString::number(ln + 1) + " Col: " + QString::number(col + 1));}

参考资料:

QT实验分析教程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。