zoukankan      html  css  js  c++  java
  • QT基础知识总结(二)

    ---恢复内容开始---

    计划着总结,发现就是把做过的东西过了一遍。

    总结确实很痛苦,先学新的东西吧,哈哈

    接上篇

    六:实现文件的新建,保存和另存为功能

      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;
    }

      

  • 相关阅读:
    Android--Facebook Login with LoginButton
    Android--Bitmap处理、圆角、圆形
    Android--打开指定程序(微博/微信/QQ等)
    Android--Google Map API V2使用
    关于Reportviewer
    Oracle Clob使用
    ASPNET WebForm T1453工作记录
    Oracle脚本批量导入时,输出日志文件
    Easyui DataGrid Editor
    Oracle 更改数据2中方式差异
  • 原文地址:https://www.cnblogs.com/Lan-ZC0803/p/9512796.html
Copyright © 2011-2022 走看看