qt5.5实现 记事本程序

最近由于要做Qt相关的毕业设计课题,以前对Qt完全不了解,对于客户端图形界面程序,也只对Windows下的MFC熟悉,

所以,由于Qt的跨平台特性和相对比较纯的C++的特点,就准备学习一下吧。这两天逛了一下Qt的开发者官方网站,和一些国内的论坛,

看了下基本的知识点,比如信号和槽的机制,界面的布局,就想写个东西,巩固一下。于是参考了官方的文档和代码,纯代码实现了一个简易的记事本程序。

希望大家参考学习,共同进步。不足之处,还请指出。

记事本简介:记事本采用代码实现GUI界面,支持,新建,保存,另存为,查找,替换,打印功能。

开发环境:win7旗舰版 32位 Qt Creator   Qt 5.5

参考资料:http://www.devbean.net/2012/08/qt-study-road-2-intro

http://doc.qt.io/qt-5/gettingstartedqt.html

界面外观:

查找功能:

替换功能:


打印功能:

保存等:

关于本屌狮

本程序涉及一个主对话框,一个查找对话框,一个替换对话框,一个打印对话框,一个关于信息对话框,一个打开对话框,一个保存对话框,其他信息提示对话框。

功能设计:主要涉及对话框的布局,主对话框与查找,替换对话框的交互。当然这是通过信号与槽的机制来实现的。下面看下具体的代码实现。

主对话框类

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QMenu>
 6 #include <QMenuBar>
 7 #include <QAction>
 8 #include <QTextEdit>
 9 #include <QIcon>
10 #include <QFile>
11 #include <QFileDialog>
12 #include <QTextStream>
13 #include <QMessageBox>
14 #include <QTextDocument>
15 #include <QTextCursor>
16 #include <QToolBar>
17 #include <QtPrintSupport/QPrinter>
18 #include <QtPrintSupport/QPrintDialog>
19 #include <QtPrintSupport/QPrintPreviewDialog>
20 #include <QtPrintSupport/QPageSetupDialog>
21 
22 #include <finddialog.h>
23 
24 #include <replacedialog.h>
25 
26 class MainWindow : public QMainWindow
27 {
28     Q_OBJECT
29 public:
30     MainWindow(QWidget *parent = 0);
31     ~MainWindow();
32 protected:
33 private slots:
34     void createMenus();
35     void createActions();
36     void newAct();
37     void openAct();
38     void saveAct();
39     void printAct();
40     void exitAct();
41     void findAct(QString,bool,bool);
42     void aboutAct();
43     void anotherSaveAct();
44     void showFindDialog();
45     void showReplaceDialog();
46     void findReplace(QString,bool);
47     void replaceCur(QString,QString);
48     void replaceAll(QString,QString,bool);
49 
50 private:
51     //菜单
52     bool   find;
53     QMenu *file_menu;
54     QMenu *edit_menu;
55     QMenu *about_menu;
56     //Action响应file_menu
57     QAction *new_act;
58     QAction *open_act;
59     QAction *save_act;
60     QAction *another_save_act;
61     QAction *print_act;
62     QAction *exit_act;
63     //Action响应edit_menu
64     QAction *find_act;
65     QAction *replace_act;
66     //Action响应help_menu
67     QAction *about_act;
68     //Edit
69     QTextEdit *mini_text;
70 
71     FindDialog *find_dialog;
72     ReplaceDialog *replace_dialog;
73     QString cur_file_name;
74 
75 };
76 
77 #endif // MAINWINDOW_H
  1 #include "mainwindow.h"
  2 MainWindow::MainWindow(QWidget *parent)
  3     : QMainWindow(parent)
  4 {
  5     setWindowTitle(tr("MiniText"));
  6     mini_text = new QTextEdit;
  7     this->setCentralWidget(mini_text);
  8     resize(900,500);
  9     cur_file_name = tr("");
 10 
 11     createActions();
 12     createMenus();
 13 }
 14 
 15 MainWindow::~MainWindow()
 16 {
 17    if(file_menu){
 18        delete file_menu;
 19    }
 20    if(edit_menu){
 21        delete edit_menu;
 22    }
 23    if(about_menu){
 24        delete about_menu;
 25    }
 26    if(new_act){
 27        delete new_act;
 28    }
 29    if(open_act){
 30        delete open_act;
 31    }
 32    if(save_act){
 33        delete save_act;
 34    }
 35    if(print_act){
 36        delete print_act;
 37    }
 38    if(exit_act){
 39        delete exit_act;
 40 
 41    }
 42    if(find_act){
 43        delete find_act;
 44 
 45    }
 46    if(replace_act){
 47        delete replace_act;
 48    }
 49    if(about_act){
 50        delete about_act;
 51    }
 52    if(mini_text){
 53        delete mini_text;
 54    }
 55    if(find_dialog){
 56        delete find_dialog;
 57    }
 58    if(replace_dialog){
 59        delete replace_dialog;
 60    }
 61    if(another_save_act){
 62        delete another_save_act;
 63    }
 64 }
 65 
 66 void MainWindow::createMenus()
 67 {
 68 
 69     file_menu = menuBar()->addMenu(tr("&文件"));
 70     file_menu->setStyleSheet("color:blue");
 71     file_menu->addAction(new_act);
 72     file_menu->addAction(open_act);
 73     file_menu->addAction(save_act);
 74     file_menu->addAction(another_save_act);
 75     file_menu->addAction(print_act);
 76     file_menu->addSeparator();
 77     file_menu->addAction(exit_act);
 78     edit_menu = menuBar()->addMenu(tr("&编辑"));
 79     edit_menu->setStyleSheet("color:blue");
 80     edit_menu->addAction(find_act);
 81     edit_menu->addAction(replace_act);
 82     about_menu = menuBar()->addMenu(tr("&关于"));
 83     about_menu->setStyleSheet("color:blue");
 84     about_menu->addAction(about_act);
 85     QToolBar *tool_bar = addToolBar(tr("file"));
 86     tool_bar->addAction(new_act);
 87     tool_bar->addAction(open_act);
 88     tool_bar->addAction(save_act);
 89     tool_bar->addAction(another_save_act);
 90     tool_bar->addAction(print_act);
 91     tool_bar->addAction(find_act);
 92     tool_bar->addAction(replace_act);
 93     tool_bar->addAction(about_act);
 94     tool_bar->addAction(exit_act);
 95 
 96 }
 97 
 98 void MainWindow::createActions()
 99 {
100     find = false;
101     find_dialog = new FindDialog(this);
102     replace_dialog = new ReplaceDialog(this);
103     //Action响应file_menu
104     new_act = new QAction(QIcon(tr(":/images/new")),tr("&新建"),this);
105     new_act->setShortcut(QKeySequence::New);
106 
107     open_act = new QAction(QIcon(tr(":/images/open")),tr("&打开"),this);
108     open_act->setShortcut(QKeySequence::Open);
109 
110     save_act = new QAction(QIcon(tr(":/images/save")),tr("&保存"),this);
111     save_act->setShortcut(QKeySequence::Save);
112 
113     another_save_act = new QAction(QIcon(tr(":/images/another_save")),tr("另存为"),this);
114 
115     print_act = new QAction(QIcon(tr(":/images/print")),tr("&打印"),this);
116     print_act->setShortcut(QKeySequence::Print);
117 
118     exit_act = new QAction(QIcon(tr(":/images/exit")),tr("&退出"),this);
119     exit_act->setShortcut(QKeySequence::Quit);
120 
121     find_act = new QAction(QIcon(tr(":/images/find")),tr("&查找"),this);
122     find_act->setShortcut(QKeySequence::Find);
123 
124     replace_act = new QAction(QIcon(tr(":/images/replace")),tr("&替换"),this);
125     replace_act->setShortcut(QKeySequence::Replace);
126 
127     about_act = new QAction(QIcon(tr(":/images/about")),tr("关于"),this);
128 
129     connect(new_act,SIGNAL(triggered()),this,SLOT(newAct()));
130     connect(open_act,SIGNAL(triggered()),this,SLOT(openAct()));
131     connect(save_act,SIGNAL(triggered()),this,SLOT(saveAct()));
132     connect(print_act,SIGNAL(triggered()),this,SLOT(printAct()));
133     connect(another_save_act,SIGNAL(triggered()),this,SLOT(anotherSaveAct()));
134     connect(exit_act,SIGNAL(triggered()),this,SLOT(exitAct()));
135     connect(find_act,SIGNAL(triggered()),this,SLOT(showFindDialog()));
136     connect(replace_act,SIGNAL(triggered()),this,SLOT(showReplaceDialog()));
137     connect(about_act,SIGNAL(triggered()),this,SLOT(aboutAct()));
138 
139     connect(find_dialog,SIGNAL(findTextDataButtonClickedSignal(QString,bool,bool)),
140             this,SLOT(findAct(QString,bool,bool)));
141     connect(replace_dialog,SIGNAL(findReplaceStr(QString,bool)),
142             this,SLOT(findReplace(QString,bool)));
143     connect(replace_dialog,SIGNAL(replaceCurOneStr(QString,QString)),
144             this,SLOT(replaceCur(QString,QString)));
145     connect(replace_dialog,SIGNAL(replaceAllStr(QString,QString,bool)),
146             this,SLOT(replaceAll(QString,QString,bool)));
147 }
148 
149 void MainWindow::newAct()
150 {
151     if (mini_text->document()->isModified())
152     {
153         QMessageBox::StandardButton button = QMessageBox::information(this,
154                                           "尚未保存", "是否要保存?",QMessageBox::Save |
155                                            QMessageBox::Discard | QMessageBox::Cancel);
156         switch(button)
157         {
158             case QMessageBox::Save:{
159                 saveAct();
160                 if (mini_text->document()->isModified()){
161                     return;
162                 }
163             }
164             case QMessageBox::Cancel:{
165                 return;
166             }
167             case QMessageBox::Discard:{
168                 break;
169             }
170         }
171     }
172     mini_text->clear();
173 }
174 
175 //打开文件
176 void MainWindow::openAct()
177 {
178     QString file_name = QFileDialog::getOpenFileName(this,tr("打开文件"),QString(),
179                           tr("文本文件(*.txt) ;; C++文件(*.h *.cpp *.hpp)"));
180     cur_file_name = file_name;
181     if(!file_name.isEmpty()){
182        QFile file(file_name);
183        if(!file.open(QIODevice::ReadOnly)){
184           QMessageBox::critical(this,tr("错误"),tr("不能打开文件"));
185           return;
186        }
187        QTextStream ins(&file);
188        mini_text->setText(ins.readAll());
189        file.close();
190     }
191 }
192 
193 //保存文件
194 void MainWindow::saveAct()
195 {
196     if(cur_file_name.isEmpty()){
197         QString file_name = QFileDialog::getSaveFileName(this,tr("保存文件"),QString(),
198                                tr("文本文件(*.txt) ;; C++文件(*.h *.cpp *.hpp)"));
199         if(!file_name.isEmpty()){
200             QFile file(file_name);
201             if(!file.open(QIODevice::WriteOnly)){
202                 QMessageBox::critical(this,tr("错误"),tr("不能打开文件"));
203                 return;
204             }
205             QTextStream outs(&file);
206             outs<<mini_text->toPlainText();
207             outs.flush();
208             file.close();
209         }
210     }
211     else{
212         QFile file(cur_file_name);
213         if(!file.open(QIODevice::WriteOnly)){
214             QMessageBox::critical(this,tr("错误"),tr("不能打开文件"));
215             return;
216         }
217         QTextStream outs(&file);
218         outs<<mini_text->toPlainText();
219         outs.flush();
220         file.close();
221     }
222 }
223 
224 void MainWindow::anotherSaveAct()
225 {
226     QString file_name = QFileDialog::getSaveFileName(this,tr("保存文件"),QString(),
227                            tr("文本文件(*.txt) ;; C++文件(*.h *.cpp *.hpp)"));
228     if(!file_name.isEmpty()){
229         QFile file(file_name);
230         if(!file.open(QIODevice::WriteOnly)){
231             QMessageBox::critical(this,tr("错误"),tr("不能打开文件"));
232             return;
233         }
234         QTextStream outs(&file);
235         outs<<mini_text->toPlainText();
236         outs.flush();
237         file.close();
238     }
239 
240 }
241 
242 void MainWindow::findReplace(QString find_str, bool flg)
243 {
244     bool find_flag;
245     if(flg){
246         find_flag = mini_text->find(find_str,QTextDocument::FindCaseSensitively);
247     }
248     else{
249         find_flag = mini_text->find(find_str);
250     }
251     if(!find_flag){
252         QMessageBox::information(this,tr("结果"),tr("没有找到查找内容"),QMessageBox::Yes);
253     }
254     else{
255         find = true;
256     }
257 
258 
259 }
260 
261 void MainWindow::replaceCur(QString find_str, QString replace_str)
262 {
263     if(find){
264         QTextCursor text_cursor = mini_text->textCursor();
265         text_cursor.insertText(replace_str);
266     }
267     else{
268         QMessageBox::information(this,tr("结果"),tr("没有内容不能替换")+find_str,QMessageBox::Yes);
269     }
270     find = false;
271 }
272 
273 void MainWindow::replaceAll(QString find_str, QString replace_str,bool flg)
274 {
275     if(!flg){
276         bool haf = mini_text->find(find_str);
277         if(haf){
278             QTextCursor text_cursor = mini_text->textCursor();
279             text_cursor.insertText(replace_str);
280             while(mini_text->find(find_str)){
281                 text_cursor = mini_text->textCursor();
282                 text_cursor.insertText(replace_str);
283             }
284             while(mini_text->find(find_str,QTextDocument::FindBackward)){
285                 text_cursor = mini_text->textCursor();
286                 text_cursor.insertText(replace_str);
287             }
288         }
289         else{
290              QMessageBox::information(this,tr("结果"),tr("没有内容不能替换 ")+find_str,QMessageBox::Yes);
291         }
292     }
293     else{
294         bool haf = mini_text->find(find_str,QTextDocument::FindCaseSensitively);
295         if(haf){
296             QTextCursor text_cursor = mini_text->textCursor();
297             text_cursor.insertText(replace_str);
298             while(mini_text->find(find_str,QTextDocument::FindCaseSensitively)){
299                 text_cursor = mini_text->textCursor();
300                 text_cursor.insertText(replace_str);
301             }
302             while(mini_text->find(find_str,QTextDocument::FindCaseSensitively|QTextDocument::FindBackward)){
303                 text_cursor = mini_text->textCursor();
304                 text_cursor.insertText(replace_str);
305             }
306         }
307         else{
308             QMessageBox::information(this,tr("结果"),tr("没有内容不能替换")+find_str,QMessageBox::Yes);
309         }
310     }
311 
312 }
313 
314 void MainWindow::printAct()
315 {
316     QPrinter printer;
317     QString printer_name = printer.printerName();
318        if( printer_name.size() == 0){
319            return;
320        }
321        QPrintDialog dlg(&printer, this);
322        if (mini_text->textCursor().hasSelection()){
323            dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
324        }
325        if(dlg.exec() == QDialog::Accepted){
326            mini_text->print(&printer);
327        }
328 }
329 
330 void MainWindow::findAct(QString str,bool ignore,bool choose)
331 {
332     QString text = str;
333     bool find_flag;
334     if(!text.isEmpty()){
335         if(choose){
336             if(ignore){
337               find_flag = mini_text->find(text,QTextDocument::FindCaseSensitively);
338             }
339             else{
340                 find_flag = mini_text->find(text);
341 
342             }
343         }
344         else{
345             if(ignore){
346                 find_flag = mini_text->find(text,QTextDocument::FindBackward|QTextDocument::FindCaseSensitively);
347             }
348             else{
349                 find_flag = mini_text->find(text,QTextDocument::FindBackward);
350 
351             }
352         }
353         if(!find_flag){
354             QMessageBox::information(this,tr("结果"),tr("没有找到查找内容"),QMessageBox::Yes);
355         }
356     }
357 
358 }
359 
360 void MainWindow::aboutAct()
361 {
362     QMessageBox message(QMessageBox::NoIcon,tr("关于"), tr("version: v1.0
"
363                                                           "author: karllen
"
364                                                           "qq: 1160113606
"
365                                                          "Begin Learning The Qt"));
366     message.setIconPixmap(QPixmap(tr(":/images/me")));
367     message.exec();
368 
369 }
370 
371 void MainWindow::showFindDialog()
372 {
373     find_dialog->show();
374 }
375 
376 void MainWindow::showReplaceDialog()
377 {
378     replace_dialog->show();
379 }
380 
381 void MainWindow::exitAct()
382 {
383     this->close();
384 
385 }

查找对话框类:

 1 #ifndef FINDDIALOG_H
 2 #define FINDDIALOG_H
 3 #include <QDialog>
 4 #include <QLineEdit>
 5 #include <QLabel>
 6 #include <QPushButton>
 7 #include <QRadioButton>
 8 #include <QGridLayout>
 9 #include <QHBoxLayout>
10 #include <QGroupBox>
11 #include <QCheckBox>
12 
13 class FindDialog:public QDialog
14 {
15     Q_OBJECT
16 public:
17     FindDialog(QWidget *parent = 0);
18     ~FindDialog();
19 
20 signals:
21     void findTextDataButtonClickedSignal(QString,bool,bool);
22 
23 private slots:
24     void findButtonState();
25     void findDataButtonClickedState();
26 
27 private:
28     QLineEdit *find_edit;
29     QLabel    *find_label,*ignore_label,*next_label,*back_label;
30     QPushButton *find_button;
31     QRadioButton *next_radio;
32     QRadioButton *back_radio;
33     QCheckBox *ignore_flag;
34 };
35 
36 #endif // FINDDIALOG_H
  1 #include "finddialog.h"
  2 
  3 FindDialog::FindDialog(QWidget *parent)
  4     :QDialog(parent)
  5 {
  6     setWindowTitle(tr("查找"));
  7     find_label = new QLabel(tr("查找"));
  8     ignore_label = new QLabel(tr("区分大小写"));
  9     next_label = new QLabel(tr("向后"));
 10     back_label = new QLabel(tr("向前"));
 11     find_edit = new QLineEdit;
 12     find_button = new QPushButton(tr("查找下一个"));
 13     next_radio = new QRadioButton;
 14     back_radio = new QRadioButton;
 15     ignore_flag = new QCheckBox;
 16 
 17     find_edit->setText(tr(""));
 18 
 19     QGridLayout *grid_layout = new QGridLayout(this);
 20     grid_layout->addWidget(find_label,0,0);
 21     grid_layout->addWidget(find_edit,0,1);
 22     grid_layout->addWidget(find_button,0,3);
 23 
 24     QHBoxLayout *ignore_layout = new QHBoxLayout;
 25     ignore_layout->setSpacing(10);
 26     ignore_layout->addWidget(ignore_label);
 27     ignore_layout->addWidget(ignore_flag);
 28 
 29     QHBoxLayout *radio_layout = new QHBoxLayout;
 30     radio_layout->addWidget(next_label);
 31     radio_layout->addWidget(next_radio);
 32 
 33     radio_layout->addWidget(back_label);
 34     radio_layout->addWidget(back_radio);
 35 
 36     QGroupBox *group_radio = new QGroupBox(tr("方向"),this);
 37     group_radio->setLayout(radio_layout);
 38 
 39     QHBoxLayout *do_radio = new QHBoxLayout;
 40     do_radio->addWidget(group_radio);
 41 
 42     grid_layout->addLayout(ignore_layout,1,0);
 43     grid_layout->addLayout(do_radio,1,1);
 44 
 45     this->setMaximumSize(300,100);
 46     next_radio->setChecked(true);
 47     find_button->setEnabled(false);
 48     connect(find_edit,SIGNAL(textChanged(QString)),this,SLOT(findButtonState()));
 49     connect(find_button,SIGNAL(clicked(bool)),this,SLOT(findDataButtonClickedState()));
 50 }
 51 
 52 FindDialog::~FindDialog()
 53 {
 54     if(find_edit){
 55         delete find_edit;
 56     }
 57     if(find_label){
 58         delete find_label;
 59     }
 60     if(ignore_label){
 61         delete ignore_label;
 62     }
 63     if(next_label){
 64         delete next_label;
 65     }
 66     if(back_label){
 67         delete back_label;
 68     }
 69     if(find_button){
 70         delete find_button;
 71     }
 72     if(next_radio){
 73         delete next_radio;
 74     }
 75     if(back_radio){
 76         delete back_radio;
 77     }
 78     if(ignore_flag){
 79         delete ignore_flag;
 80     }
 81 }
 82 
 83 void FindDialog::findButtonState()
 84 {
 85     if(find_edit->text().isEmpty()){
 86         find_button->setEnabled(false);
 87     }
 88     else{
 89         find_button->setEnabled(true);
 90     }
 91 
 92 }
 93 
 94 void FindDialog::findDataButtonClickedState()
 95 {
 96     if(find_edit->text().isEmpty()){
 97         return;
 98     }
 99     QString str = find_edit->text();
100     if(next_radio->isChecked()){
101         if(ignore_flag->isChecked()){
102             emit findTextDataButtonClickedSignal(str,true,true);
103         }
104         else{
105             emit findTextDataButtonClickedSignal(str,false,true);
106         }
107     }
108     if(back_radio->isChecked()){
109         if(ignore_flag->isChecked()){
110             emit findTextDataButtonClickedSignal(str,true,false);
111         }
112         else{
113             emit findTextDataButtonClickedSignal(str,false,false);
114         }
115     }
116 }

替换对话框类:

 1 #ifndef REPLACEDIALOG_H
 2 #define REPLACEDIALOG_H
 3 
 4 #include <QDialog>
 5 #include <QPushButton>
 6 #include <QLabel>
 7 #include <QCheckBox>
 8 #include <QLineEdit>
 9 #include <QGridLayout>
10 #include <QVBoxLayout>
11 
12 class ReplaceDialog:public QDialog
13 {
14     Q_OBJECT
15 public:
16     ReplaceDialog(QWidget *parent = 0);
17     ~ReplaceDialog();
18 signals:
19     void replaceAllStr(QString , QString,bool);
20     void replaceCurOneStr(QString,QString);
21     void findReplaceStr(QString,bool);
22 private slots:
23     void chooseStrSlot();
24     void findButtonStateSlot();
25     void replaceOneButtonStateSlot();
26     void replaceAllButtonStateSlot();
27 private:
28     QLineEdit *find_str;
29     QLineEdit *replace_str;
30     QPushButton *find_next_button;
31     QPushButton *replaced_one_button;
32     QPushButton *replaced_all_button;
33     QPushButton *cancle_button;
34     QCheckBox *ignore_flag;
35     QLabel  *find_label;
36     QLabel  *replace_label;
37 };
38 
39 #endif // REPLACEDIALOG_H
  1 #include "replacedialog.h"
  2 
  3 ReplaceDialog::ReplaceDialog(QWidget *parent)
  4     :QDialog(parent)
  5 {
  6     find_label          = new QLabel(tr("查找内容"));
  7     replace_label       = new QLabel(tr("替换为"));
  8     find_str            = new QLineEdit();
  9     replace_str         = new QLineEdit();
 10     find_next_button    = new QPushButton(tr("查找下一个"));
 11     replaced_one_button = new QPushButton(tr("替换"));
 12     replaced_all_button = new QPushButton(tr("全部替换"));
 13     cancle_button       = new QPushButton(tr("取消"));
 14     ignore_flag         = new QCheckBox(tr("区分大小写"));
 15 
 16     QGridLayout *grdly  = new QGridLayout(this);
 17     QVBoxLayout *vboxly = new QVBoxLayout(this);
 18 
 19     vboxly->addWidget(replaced_all_button);
 20     vboxly->addWidget(cancle_button);
 21     grdly->addWidget(find_label,0,0);
 22     grdly->addWidget(find_str,0,1);
 23     grdly->addWidget(find_next_button,0,2);
 24     grdly->addWidget(replace_label,1,0);
 25     grdly->addWidget(replace_str,1,1);
 26     grdly->addWidget(replaced_one_button,1,2);
 27     grdly->addWidget(ignore_flag,2,1);
 28     grdly->addLayout(vboxly,2,2);
 29 
 30     find_str->setText(tr(""));
 31     replace_str->setText(tr(""));
 32     find_next_button->setEnabled(false);
 33     replaced_one_button->setEnabled(false);
 34     replaced_all_button->setEnabled(false);
 35 
 36     this->setMaximumSize(300,100);
 37 
 38     connect(find_str,SIGNAL(textChanged(QString)),this,SLOT(chooseStrSlot()));
 39     connect(cancle_button,SIGNAL(clicked()),this,SLOT(close()));
 40     connect(find_next_button,SIGNAL(clicked()),this,SLOT(findButtonStateSlot()));
 41     connect(replaced_one_button,SIGNAL(clicked()),this,SLOT(replaceOneButtonStateSlot()));
 42     connect(replaced_all_button,SIGNAL(clicked()),this,SLOT(replaceAllButtonStateSlot()));
 43 }
 44 
 45 ReplaceDialog::~ReplaceDialog()
 46 {
 47     if(find_str){
 48         delete find_str;
 49     }
 50     if(replace_str){
 51         delete replace_str;
 52     }
 53     if(find_next_button){
 54         delete find_next_button;
 55     }
 56     if(replaced_one_button){
 57         delete replaced_one_button;
 58     }
 59     if(replaced_all_button){
 60         delete replaced_all_button;
 61     }
 62     if(cancle_button){
 63         delete cancle_button;
 64     }
 65     if(ignore_flag){
 66         delete ignore_flag;
 67     }
 68     if(find_label){
 69         delete find_label;
 70     }
 71     if(replace_label){
 72         delete replace_label;
 73     }
 74 }
 75 
 76 void ReplaceDialog::chooseStrSlot()
 77 {
 78     if(!find_str->text().isEmpty()){
 79         find_next_button->setEnabled(true);
 80         replaced_one_button->setEnabled(true);
 81         replaced_all_button->setEnabled(true);
 82     }
 83     else{
 84         find_next_button->setEnabled(false);
 85         replaced_one_button->setEnabled(false);
 86         replaced_all_button->setEnabled(false);
 87     }
 88 }
 89 
 90 void ReplaceDialog::findButtonStateSlot()
 91 {
 92     if(ignore_flag->isChecked()){
 93         emit findReplaceStr(find_str->text(),true);
 94     }
 95     else{
 96         emit findReplaceStr(find_str->text(),false);
 97     }
 98 }
 99 
100 void ReplaceDialog::replaceOneButtonStateSlot()
101 {
102     emit replaceCurOneStr(find_str->text(),replace_str->text());
103 
104 }
105 
106 void ReplaceDialog::replaceAllButtonStateSlot()
107 {
108     if(ignore_flag->isChecked()){
109         emit replaceAllStr(find_str->text() , replace_str->text(),true);
110     }
111     else{
112         emit replaceAllStr(find_str->text() , replace_str->text(),false);
113     }
114 
115 
116 }

main函数:

 1 #include "mainwindow.h"
 2 #include "finddialog.h"
 3 #include <QApplication>
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8 
 9     MainWindow w;
10     w.show();
11     return a.exec();
12 }

注:代码下载地址 http://download.csdn.net/detail/u010085340/9289609                                       

原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/4985133.html