查找对话框的逻辑实现

查找对话框的查找逻辑

查找对话框的核心逻辑

  1. 获取当前光标的位置并作为起始点
  2. 向后(向前)查找目标第一次出现的位置
  3. 通过目标位置以及目标长度在文本框中进行标记

功能查找的实现

QString类中提供了子串查找的相关函数

indexOf(value, index)
从指定位置向后查找子串的下标位置
lastIndexOf(value, index)
从指定位置向前查找子串的下标位置,向前查找index需要负数。

Qt中光标信息类QTextCursor

所有的光标相关信息都通过这个类描述如:光标位置,文本选择等

查找算法流程图

在这里插入图片描述

具体代码实现

void FindDialog::onFindClicked()
{
    QString target = m_findEdit.text();
    
    if( (m_PText != NULL) && (target != "") )
    {
        QString text = m_PText->toPlainText();
        QTextCursor c = m_PText->textCursor();
        int index = -1;
        
        if(m_forwardBtn.isChecked())
        {
            index = text.indexOf(target, c.position(), m_mathChkBx.isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);   //从鼠标坐标处查找,后两个参数一个大小写敏感一个是不敏感

            if( index >= 0 )
            {
                c.setPosition(index);
                c.setPosition(index + target.length(), QTextCursor::KeepAnchor);

                m_PText->setTextCursor(c);
            }
        }

        if(m_backwardBtn.isChecked())
        {
            index = text.lastIndexOf(target, c.position()-text.length()-1, m_mathChkBx.isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);

            if(index >= 0)
            {
                c.setPosition(index + target.length());
                c.setPosition(index, QTextCursor::KeepAnchor);

                m_PText->setTextCursor(c);
            }
        }

        if(index < 0)
        {
            QMessageBox msg(this);

            msg.setWindowTitle("Find");
            msg.setText("Can not find \"" + target + "\" any more...");
            msg.setIcon(QMessageBox::Information);
            msg.setStandardButtons(QMessageBox::Ok);

            msg.exec();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值