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

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

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

在这里插入图片描述
思路:

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

算法流程描述:

思想:

  1. 通过’\n’字符的个数计算所在行。
  2. 通过最后一个’\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后面返回3
    QString 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));
}

参考资料:

  1. QT实验分析教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值