Qt之文本编辑器(二)

  紧接着我们的上一篇博文Qt之文本编辑器(一)http://yiluohuanghun.blog.51cto.com/3407300/959827我们继续我哦们的文本编辑器之旅。 


  1. void MainWindow::createMenus() 
  2.     fileMenu = menuBar()->addMenu(tr("&File")); 
  3.     fileMenu->addAction(newAct); 
  4.     fileMenu->addAction(openAct); 
  5.     fileMenu->addAction(saveAct); 
  6.     fileMenu->addAction(saveAsAct); 
  7.     fileMenu->addSeparator(); 
  8.     fileMenu->addAction(exitAct); 
  9.  
  10.     editMenu = menuBar()->addMenu(tr("&Edit")); 
  11.     editMenu->addAction(cutAct); 
  12.     editMenu->addAction(copyAct); 
  13.     editMenu->addAction(pasteAct); 
  14.     menuBar()->addSeparator(); 
  15.  
  16.     formMenu = menuBar()->addMenu(tr("&Form")); 
  17.     formMenu->addAction(automaticAct); 
  18.     formMenu->addAction(typefaceAct); 
  19.     menuBar()->addSeparator(); 
  20.  
  21.     helpMenu = menuBar()->addMenu(tr("&Help")); 
  22.     helpMenu->addAction(aboutAct); 
  23.     helpMenu->addAction(aboutQtAct); 
创建菜单,以及进行布局。
 

  1. void MainWindow::createToolBars() 
  2.     fileToolBar = addToolBar(tr("File")); 
  3.     fileToolBar->addAction(newAct); 
  4.     fileToolBar->addAction(openAct); 
  5.     fileToolBar->addAction(saveAct); 
  6.     editToolBar = addToolBar(tr("Edit")); 
  7.     editToolBar->addAction(cutAct); 
  8.     editToolBar->addAction(copyAct); 
  9.     editToolBar->addAction(pasteAct); 
创建工具Bar,并对其添加Action.

  1. void MainWindow::createStatusBar() 
  2.     statusBar()->showMessage(tr("Ready")); 
QMainWindow::statusBar()返回指向窗口的QStatusBar widget的指针
 

  1. void MainWindow::readSettings() 
  2.     QSettings settings("Yzs""Application Example"); 
  3.     QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); 
  4.     QSize size = settings.value("size", QSize(400, 400)).toSize(); 
  5.     resize(size); 
  6.     move(pos); 
  7. void MainWindow::writeSettings() 
  8.     QSettings settings("Yzs""Application Example"); 
  9.     settings.setValue("pos", pos()); 
  10.     settings.setValue("size", size()); 
  11.  
利用QSettings类的实现了利用,关于这个类的具体用法可以参考我的另一篇博文,我有详尽的说明。http://yiluohuanghun.blog.51cto.com/3407300/952807
  

  1. bool MainWindow::maybeSave() 
  2.     if(textEdit->document()->isModified()) 
  3.     { 
  4.         int ret = QMessageBox::warning(this, tr("Application"), 
  5.                                        tr("The document has been modified.\n" 
  6.                                           "Do you want to save your changes?"), 
  7.                                        QMessageBox::Yes | QMessageBox::Default, 
  8.                                        QMessageBox::No, 
  9.                                        QMessageBox::Cancel | QMessageBox::Escape); 
  10.         if(ret == QMessageBox::Yes) 
  11.             return save(); 
  12.         else if(ret == QMessageBox::Cancel) 
  13.             return false
  14.     } 
  15.     return true
  16. void MainWindow::loadFile(const QString &fileName) 
  17.     QFile file(fileName); 
  18.     if(!file.open(QFile::ReadOnly | QFile::Text)) 
  19.     { 
  20.         QMessageBox::warning(this, tr("Application"), 
  21.                              tr("Cannot read file %1:\n%2."
  22.                              .arg(fileName).arg(file.errorString())); 
  23.         return ; 
  24.     } 
  25.     QTextStream in(&file); 
  26.     QApplication::setOverrideCursor(Qt::WaitCursor); 
  27.     textEdit->setPlainText(in.readAll()); 
  28.     QApplication::restoreOverrideCursor(); 
  29.     setCurrentFile(fileName); 
  30.     statusBar()->showMessage(tr("File loaded"), 2000); 
  31. bool MainWindow::saveFile(const QString &fileName) 
  32.     QFile file(fileName); 
  33.     if(!file.open(QFile::WriteOnly | QFile::Text)) 
  34.     { 
  35.         QMessageBox::warning(this, tr("Application"), 
  36.                              tr("Cannot write file %1:\n%2."
  37.                              .arg(fileName).arg(file.errorString())); 
  38.         return false
  39.     } 
  40.     QTextStream out(&file); 
  41.     QApplication::setOverrideCursor(Qt::WaitCursor); 
  42.     out<<textEdit->toPlainText(); 
  43.     QApplication::restoreOverrideCursor(); 
  44.     setCurrentFile(fileName); 
  45.     statusBar()->showMessage(tr("File saved"), 2000); 
  46.     return false
maybeSave()函数实现判断文件是否已保存,loadFile()函数实现对文件的加载,saveFile()函数实现对文件的保存
 

  1. void MainWindow::setCurrentFile(const QString &fileName) 
  2.     curFile = fileName; 
  3.     textEdit->document()->setModified(false); 
  4.     setWindowModified(false); 
  5.     QString shownName; 
  6.     if(curFile.isEmpty()) 
  7.         shownName = "untitled.txt"
  8.     else 
  9.         shownName = strippedName(curFile); 
  10.     setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application"))); 
setCurrentFile()函数在一个文件被装载、保存或用户开始编辑新文件时被调用,
  用于复位一些变量的状态。我们更新curFile变量,清0 QTextDocument::modified标志和与之相关的
   QWidget::windowModified标志,更新窗口的标题以包含新文件名。
 

  1. QString MainWindow::strippedName(const QString &fullFileName) 
  2.     return QFileInfo(fullFileName).fileName(); 
strippedName()函数用于修改文件名为较短的绝对路径。
 
我们的详细函数设计已经完成了,下面就只剩下我们的main函数了
 

  1. int main(int argc, char *argv[]) 
  2.     Q_INIT_RESOURCE(application); 
  3.     QApplication app(argc, argv); 
  4.     MainWindow mainWin; 
  5.     mainWin.show(); 
  6.     return app.exec(); 
OK了,但还有一点大家不要忘了,我们在程序中使用了资源文件,我们的图片文件都是存储在资源文件中的,我们新建资源文件application.qrc,而后在application.pro文件中需加入RESOURCES = application.qrc,资源文件的具体内容如下:
 

  1. <qresource> 
  2.     <file>images/copy.png</file> 
  3.     <file>images/cut.png</file> 
  4.     <file>images/new.png</file> 
  5.     <file>images/open.png</file> 
  6.     <file>images/paste.png</file> 
  7.     <file>images/save.png</file> 
  8. </qresource> 
  9. </RCC> 
这样我们就真真正正的实现了一个简单的文本编辑器了,感觉怎么样,一切都是那样的清晰。

 





     本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/961015,如需转载请自行联系原作者


上一篇:使用c:forEach 控制5个换行


下一篇:3DES一些说明