qt 制作记事本_qt5.5实现 记事本程序

这个博客详细介绍了如何使用Qt5.5来制作一个简单的记事本程序,包括新建、打开、保存、打印、查找和替换等功能。通过创建菜单栏、工具栏,设置快捷键,以及实现相应动作的槽函数,完成记事本的基本操作。
摘要由CSDN通过智能技术生成

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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值