一、查找功能的实现 1、文本查找功能的核心思想 (1)、获取当前光标的位置并作为起始点 (2)、向前(向后)查找目标第一次出现的位置 (3)、通过目标位置以及目标长度在文本框中进行标记 2、QString提供了子串查找的相关函数 (1)、indexOf:从指定位置向后查找目标子串下标位置 (2)、lastIndexOf:从指定位置向前查找目标子串下标位置 3、QString类中查找函数所使用的下标位置 4、Qt中的光标信息类QTextCursor (1)、文本框中的光标是一个QTextCursor类的对象 (2)、所有与光标相关的信息都通过QTextCursor描述(如光标位置、文本选择等) 5、查找算法流程图 6、MainWindow和FindDialog之间的关系(为了实现弱耦合,使FindDialog内部一个指针指向QPlainTextEdit即可) 实现的具体步骤: 1、为了简化构造函数,就把一些初始化的东西抽取出来封装到一个函数voidFindDialog::initControl(){mfindLabel。setText(查找内容:);mfindButton。setEnabled(false);mfindButton。setText(查找下一个);mcheckBox。setText(区分大小写);mforwardButton。setText(向上);mbackwardButton。setChecked(true);mbackwardButton。setText(向下);mcancleButton。setText(取消);mgBox。setTitle(方向);mhLayout。addWidget(mforwardButton);mhLayout。addWidget(mbackwardButton);mgBox。setLayout(mhLayout);mgLayout。setSpacing(10);mgLayout。addWidget(mfindLabel,0,0);mgLayout。addWidget(mfindLineEdit,0,1);mgLayout。addWidget(mfindButton,0,2);mgLayout。addWidget(mcheckBox,1,0);mgLayout。addWidget(mgBox,1,1);mgLayout。addWidget(mcancleButton,1,2);} 2、为了实现弱耦合,FindDialog里定义一个指向QPlainTextEdit的指针,通过构造函数传进来(并定义get和set函数来做相关操作) 3、定义槽函数并在构造函数中连接信号与槽 4、编写槽函数voidFindDialog::setPlainTextEdit(QPlainTextEditpText){mplainTextEditpText;}QPlainTextEditFindDialog::getPlainTextEdit(){returnmplainTextEdit;}voidFindDialog::onFindButtonClicked(){QStringtargetmfindLineEdit。text();if((mplainTextEdit!NULL)(target!)){QStringtextmplainTextEdittoPlainText();QTextCursorcmplainTextEdittextCursor();intindex1;if(mbackwardButton。isChecked()){indextext。indexOf(target,c。position(),mcheckBox。isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive);if(index0){c。setPosition(index);c。setPosition(indextarget。length(),QTextCursor::KeepAnchor);mplainTextEditsetTextCursor(c);将光标信息设置到文本框里面才能看见效果}}if(mforwardButton。isChecked()){indextext。lastIndexOf(target,c。position()text。length()1,mcheckBox。isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive);注意下标为负数if(index0){c。setPosition(indextarget。length());c。setPosition(index,QTextCursor::KeepAnchor);注意后往前找到后设置光标的方法mplainTextEditsetTextCursor(c);}}if(index0){QMessageBoxdlg(this);dlg。setText(找不到target);dlg。setStandardButtons(QMessageBox::Ok);dlg。setIcon(QMessageBox::Information);dlg。setWindowTitle(查找5);dlg。exec();}}}voidFindDialog::onCancleButtonClicked(){close();} 5、记得调用FindDialog构造函数时传多一个参数 二、小结 (1)、QString提供了不同的子串查找方式 (2)、QTextCursor对象保存了文本框中光标的相关信息 (3)、QString对象和QTextCursor对象协作实现查找功能 (4)、查找对话框和文本框的弱耦合关系满足了可复用的需求 【领QT开发教程学习资料,点击下方链接莬费领取,先码住不迷路】 链接