---恢复内容开始---
计划着总结,发现就是把做过的东西过了一遍。
总结确实很痛苦,先学新的东西吧,哈哈
接上篇
六:实现文件的新建,保存和另存为功能
1.在头文件中Public中声明函数:
-
- voidnewFile(); // 新建操作
- boolmaybeSave(); // 判断是否需要保存
- boolsave(); // 保存操作
- boolsaveAs(); // 另存为操作
- boolsaveFile(const QString &fileName); // 保存文件
2.private部分添加变量定义:
//
为真表示文件没有保存过,为假表示文件已经被保存过了
bool
isUntitled
;
//
保存当前文件的路径
QString
curFile
;
3.在构造函数中添加代码进行初始化:
//
初始化文件为未保存状态
isUntitled = true;
//
初始化文件名为"未命名.txt"
curFile = tr("
未命名.txt"
);
//
初始化窗口标题为文件名
setWindowTitle(curFile);
4.添加声明函数的定义
void MainWindow::newFile() { if(maybeSave()){ isUntitled = true; curFile = tr("未命名.txt"); setWindowTitle(curFile); ui->textEdit->clear(); ui->textEdit->setVisible(true); } } bool MainWindow::maybeSave() { //如果文档被更改了 if(ui->textEdit->document()->isModified()){ //自定义一个警告对话框 QMessageBox box; box.setWindowTitle(tr("警告")); box.setIcon(QMessageBox::Warning); box.setText(curFile + tr("尚未保存,是否保存?")); QPushButton *yesBtn = box.addButton(tr("是(&y)"), QMessageBox::YesRole); box.addButton(tr("否(&N)"),QMessageBox::NoRole); QPushButton *cancelBut = box.addButton(tr("取消"), QMessageBox::RejectRole); box.exec(); if(box.clickedButton() == yesBtn) return save(); else if(box.clickedButton() == cancelBut) return false; } //如果没有被更改,则直接返回True return true; } bool MainWindow::save() { if(isUntitled){ return saveAs(); }else{ return saveFile(curFile); } } bool MainWindow::saveAs() { QString fileName = QFileDialog::getSaveFileName(this, tr("另存为/n"),curFile); if(fileName.isEmpty()) { return false;} return saveFile(fileName); } bool MainWindow::saveFile(const QString &fileName) { QFile file(fileName); if(!file.open(QFile::WriteOnly | QFile::Text)){ QMessageBox::warning(this,tr("多文档编辑器"), tr("无法写入文件 %1,/n %2") .arg(fileName) .arg(file.errorString())); return false; } QTextStream out(&file); QApplication::setOverrideCursor(Qt::WaitCursor); out << ui->textEdit->toPlainText(); QApplication::restoreOverrideCursor(); isUntitled = false; curFile = QFileInfo(fileName).canonicalFilePath(); setWindowTitle(curFile); return true; } bool MainWindow::loadFile(const QString &fileName) { QFile file(fileName); if(!file.open(QFile::WriteOnly | QFile::Text)){ QMessageBox::warning(this,tr("多文档编辑器"), tr("无法读取文件 %1,/n %2") .arg(fileName) .arg(file.errorString())); return false; } QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); ui->textEdit->setPlainText(in.readAll()); QApplication::restoreOverrideCursor(); //设置当前文件 curFile = QFileInfo(fileName).canonicalFilePath(); setWindowTitle(curFile); return true; }