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

 

  

posted @ 2018-08-21 20:36  晓生寒  阅读(752)  评论(0编辑  收藏  举报