文章目录
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实验分析教程