QT笔记之简易文本编辑器所需函数
来源:互联网 发布:单片机开关量输入电路 编辑:程序博客网 时间:2024/06/04 18:28
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); isSaved = false;//初始化文件为未保存过状态 curFile = tr("未命名.txt"); setWindowTitle(curFile);//初始化主窗口的标题}void MainWindow::do_file_New() //实现新建文件的功能{ do_file_SaveOrNot(); isSaved = false; curFile = tr("未命名.txt"); setWindowTitle(curFile); ui->textEdit->clear(); //清空文本编辑器 ui->textEdit->setVisible(true); //文本编辑器可见}void MainWindow::do_file_SaveOrNot() //弹出是否保存文件对话框{ if(ui->textEdit->document()->isModified()) //如果文件被更改过,弹出保存对话框 { QMessageBox box; box.setWindowTitle(tr("警告")); box.setIcon(QMessageBox::Warning); box.setText(curFile+tr("尚未保存,是否保存?")); box.setStandardButtons(QMessageBox::Yes | QMessageBox::No); if(box.exec() == QMessageBox::Yes) //如果选择保存文件,则执行保存操作 do_file_Save(); }}void MainWindow::do_file_Save() //保存文件{ if(isSaved) { //如果文件已经被保存过,直接保存文件 saveFile(curFile); } else { do_file_SaveAs(); //如果文件是第一次保存,那么调用另存为 }}void MainWindow::do_file_SaveAs()//文件另存为{ QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile);//获得文件名 if(!fileName.isEmpty()) //如果文件名不为空,则保存文件内容 { 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; } //%1,%2表示后面的两个arg参数的值 QTextStream out(&file); //新建流对象,指向选定的文件 out<< ui->textEdit->toPlainText(); //将文本编辑器里的内容以纯文本的形式输出到流对象中 isSaved = true; curFile = QFileInfo(fileName).canonicalFilePath();//获得文件的标准路径 setWindowTitle(curFile); //将窗口名称改为现在窗口的路径 return true;}void MainWindow::do_file_Open()//打开文件{ do_file_SaveOrNot();//是否需要保存现有文件 QString fileName = QFileDialog::getOpenFileName(this); //获得要打开的文件的名字 if(!fileName.isEmpty())//如果文件名不为空 { do_file_Load(fileName); } ui->textEdit->setVisible(true);//文本编辑器可见}bool MainWindow::do_file_Load(const QString& fileName) //读取文件{ QFile file(fileName); if(!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this,tr("读取文件"),tr("无法读取文件 %1:\n%2.").arg(fileName).arg(file.errorString())); return false; //如果打开文件失败,弹出对话框,并返回 } QTextStream in(&file); ui->textEdit->setText(in.readAll()); //将文件中的所有内容都写到文本编辑器中 curFile = QFileInfo(fileName).canonicalFilePath(); setWindowTitle(curFile); return true;}