1 #include "mainwindow.h"
2 MainWindow::MainWindow(QWidget *parent)3 : QMainWindow(parent)4 {5 setWindowTitle(tr("MiniText"));6 mini_text = newQTextEdit;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 deletefile_menu;19 }20 if(edit_menu){21 deleteedit_menu;22 }23 if(about_menu){24 deleteabout_menu;25 }26 if(new_act){27 deletenew_act;28 }29 if(open_act){30 deleteopen_act;31 }32 if(save_act){33 deletesave_act;34 }35 if(print_act){36 deleteprint_act;37 }38 if(exit_act){39 deleteexit_act;40
41 }42 if(find_act){43 deletefind_act;44
45 }46 if(replace_act){47 deletereplace_act;48 }49 if(about_act){50 deleteabout_act;51 }52 if(mini_text){53 deletemini_text;54 }55 if(find_dialog){56 deletefind_dialog;57 }58 if(replace_dialog){59 deletereplace_dialog;60 }61 if(another_save_act){62 deleteanother_save_act;63 }64 }65
66 voidMainWindow::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 voidMainWindow::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 voidMainWindow::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 caseQMessageBox::Save:{159 saveAct();160 if (mini_text->document()->isModified()){161 return;162 }163 }164 caseQMessageBox::Cancel:{165 return;166 }167 caseQMessageBox::Discard:{168 break;169 }170 }171 }172 mini_text->clear();173 }174
175 //打开文件
176 voidMainWindow::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 voidMainWindow::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<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<toPlainText();219 outs.flush();220 file.close();221 }222 }223
224 voidMainWindow::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<toPlainText();236 outs.flush();237 file.close();238 }239
240 }241
242 void MainWindow::findReplace(QString find_str, boolflg)243 {244 boolfind_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 voidMainWindow::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,boolflg)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 voidMainWindow::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,boolchoose)331 {332 QString text =str;333 boolfind_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 voidMainWindow::aboutAct()361 {362 QMessageBox message(QMessageBox::NoIcon,tr("关于"), tr("version: v1.0\n"
363 "author: karllen\n"
364 "qq: 1160113606\n"
365 "Begin Learning The Qt"));366 message.setIconPixmap(QPixmap(tr(":/images/me")));367 message.exec();368
369 }370
371 voidMainWindow::showFindDialog()372 {373 find_dialog->show();374 }375
376 voidMainWindow::showReplaceDialog()377 {378 replace_dialog->show();379 }380
381 voidMainWindow::exitAct()382 {383 this->close();384
385 }