紧接着我们的上一篇博文Qt之文本编辑器(上)我们继续我哦们的文本编辑器之旅。
void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); fileMenu->addAction(saveAct); fileMenu->addAction(saveAsAct); fileMenu->addSeparator(); fileMenu->addAction(exitAct); editMenu = menuBar()->addMenu(tr("&Edit")); editMenu->addAction(cutAct); editMenu->addAction(copyAct); editMenu->addAction(pasteAct); menuBar()->addSeparator(); formMenu = menuBar()->addMenu(tr("&Form")); formMenu->addAction(automaticAct); formMenu->addAction(typefaceAct); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(aboutAct); helpMenu->addAction(aboutQtAct); }
创建菜单,以及进行布局。
void MainWindow::createToolBars() { fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); fileToolBar->addAction(saveAct); editToolBar = addToolBar(tr("Edit")); editToolBar->addAction(cutAct); editToolBar->addAction(copyAct); editToolBar->addAction(pasteAct); }
创建工具Bar,并对其添加Action.
void MainWindow::createStatusBar() { statusBar()->showMessage(tr("Ready")); }
QMainWindow::statusBar()返回指向窗口的QStatusBar widget的指针
void MainWindow::readSettings() { QSettings settings("Yzs", "Application Example"); QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); QSize size = settings.value("size", QSize(400, 400)).toSize(); resize(size); move(pos); } void MainWindow::writeSettings() { QSettings settings("Yzs", "Application Example"); settings.setValue("pos", pos()); settings.setValue("size", size()); }
利用QSettings类的实现了利用,关于这个类的具体用法可以参考我的另一篇博文,我有详尽的说明。
bool MainWindow::maybeSave() { if(textEdit->document()->isModified()) { int ret = QMessageBox::warning(this, tr("Application"), tr("The document has been modified.\n" "Do you want to save your changes?"), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); if(ret == QMessageBox::Yes) return save(); else if(ret == QMessageBox::Cancel) return false; } return true; } void MainWindow::loadFile(const QString &fileName) { QFile file(fileName); if(!file.open(Qfile::ReadOnly | Qfile::Text)) { QMessageBox::warning(this, tr("Application"), tr("Cannot read file %1:\n%2.") .arg(fileName).arg(file.errorString())); return ; } QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); textEdit->setPlainText(in.readAll()); QApplication::restoreOverrideCursor(); setCurrentFile(fileName); statusBar()->showMessage(tr("File loaded"), 2000); } bool MainWindow::saveFile(const QString &fileName) { QFile file(fileName); if(!file.open(Qfile::WriteOnly | Qfile::Text)) { QMessageBox::warning(this, tr("Application"), tr("Cannot write file %1:\n%2.") .arg(fileName).arg(file.errorString())); return false; } QTextStream out(&file); QApplication::setOverrideCursor(Qt::WaitCursor); out<<textEdit->toPlainText(); QApplication::restoreOverrideCursor(); setCurrentFile(fileName); statusBar()->showMessage(tr("File saved"), 2000); return false; }
maybeSave()函数实现判断文件是否已保存,loadFile()函数实现对文件的加载,saveFile()函数实现对文件的保存
void MainWindow::setCurrentFile(const QString &fileName) { curFile = fileName; textEdit->document()->setModified(false); setWindowModified(false); QString shownName; if(curFile.isEmpty()) shownName = "untitled.txt"; else shownName = strippedName(curFile); setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application"))); }
setCurrentFile()函数在一个文件被装载、保存或用户开始编辑新文件时被调用,
用于复位一些变量的状态。我们更新curFile变量,清0 QTextDocument::modified标志和与之相关的
QWidget::windowModified标志,更新窗口的标题以包含新文件名。
QString MainWindow::strippedName(const QString &fullFileName) { return QFileInfo(fullFileName).fileName(); }
strippedName()函数用于修改文件名为较短的绝对路径。
我们的详细函数设计已经完成了,下面就只剩下我们的main函数了
int main(int argc, char *argv[]) { Q_INIT_RESOURCE(application); QApplication app(argc, argv); MainWindow mainWin; mainWin.show(); return app.exec(); }
OK了,但还有一点大家不要忘了,我们在程序中使用了资源文件,我们的图片文件都是存储在资源文件中的,我们新建资源文件application.qrc,而后在application.pro文件中需加入RESOURCES = application.qrc,资源文件的具体内容如下:
<qresource> <file>images/copy.png</file> <file>images/cut.png</file> <file>images/new.png</file> <file>images/open.png</file> <file>images/paste.png</file> <file>images/save.png</file> </qresource> </RCC>
这样我们就真真正正的实现了一个简单的文本编辑器了,感觉怎么样,一切都是那样的清晰。
本文出自 “驿落黄昏” 博客,请务必保留此出处http://yiluohuanghun.blog.51cto.com/3407300/961015