查找与替换是存在共同之处的功能,可以将他们放在一个选项卡窗口下
findtext设计replaceSignal信号
1 2 3
| signals: // 第一个参数为要查找的,第二个为替换目标 void replaceSignal(const QString &, const QString &);
|
在findText.cpp
发送信号
1 2 3 4 5 6 7
| void findText::emitReplaceSignal(){ QString string = ui->lineEdit_2->text(); QString replaceStr = ui->lineEdit_3->text(); if(!string.isEmpty() && !replaceStr.isEmpty()){ emit replaceSignal(string, replaceStr); } }
|
主窗口设计接受信号槽
在MainWindow.h
声明接受信号槽
1 2
| private slots: void StartReplace(const QString&, const QString&);
|
在MainWindow.cpp
内以FindDlg(int choice)
处理查找替换两种功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| // 打开查找对话框 void MainWindow::Find(bool){ FindDlg(0); } void MainWindow::Find_Replace(bool){ FindDlg(1); } void MainWindow::FindDlg(int choice){ findtext = new findText(this, choice); // 接受来自findtext发过来的信号serachsignal,replaceSignal connect(findtext, SIGNAL(searchSignal(const QString&, bool, bool, bool)), this, SLOT(StartSearch(const QString&, bool, bool, bool))); connect(findtext, SIGNAL(replaceSignal(const QString&, const QString&)), this,SLOT(StartReplace(const QString&, const QString&))); activeEditor()->moveCursor(QTextCursor::Start); findtext->show(); }
|
在findtext.cpp
构造函数内进行选项卡的对应
1 2 3 4 5
| if(choice == 0){ //Find ui->tabWidget->setCurrentIndex(0); }else if(choice == 1){ //Find&Replace ui->tabWidget->setCurrentIndex(1); }
|
开始替换
1 2 3 4 5 6 7 8 9 10
| void MainWindow::StartReplace(const QString &data, const QString &replaceStr){ if(!activeEditor()){ return; } QTextCursor cursor = activeEditor()->textCursor(); if(cursor.hasSelection() && cursor.selectedText() == data){ cursor.removeSelectedText(); cursor.insertText(replaceStr); } }
|