QT案例学习08--打开txt文件(open),保存(save),退出(exit),另存为(saveAs)等操作

  • 在ui界面里,右侧文件树,将部件的名字改为各自的对应操作名称,如saveAction,openAction,saveAsAction,exitAction等,方便编程.
  • 文件中定义了一个全局变量QfileName,用于保存文件名,在save 和saveAs操作时,如果QfileName已经有值,则save时不需要新建文件,否则后台需要新建一个文件,并命名为QfileName的内容。
//MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
// added
#include <QFile>
#include <QDir>
#include <QTextStream>
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("Untitled---myy");
    QObject::connect(ui->newAction,SIGNAL(triggered()),this,SLOT(callActionSlot()));//new open
    QObject::connect(ui->openAction,SIGNAL(triggered()),this,SLOT(openActionSlot()));//open a file
    QObject::connect(ui->saveAsAction,SIGNAL(triggered()),this,SLOT(saveAsActionSlot()));//save as
    QObject::connect(ui->saveAction,SIGNAL(triggered()),this,SLOT(saveActionSlot()));//save
    QObject::connect(ui->exitAction,SIGNAL(triggered()),this,SLOT(close()));//exit
}
 void MainWindow::callActionSlot()
 {
    if(ui->textEdit->document()->isModified())
    {
        ui->textEdit->clear();
        this->setWindowTitle("Has been edited");
        //qDebug()<<"is Modified";
    }
    else {
        //qDebug()<<"not Modified";
    }
 }

 //open file
 void MainWindow::openActionSlot()
 {
     //getOpenFileName() 是一个写好的选择文件的对话框,并且一旦选择后,会将文件绝对路径传入;保存文件对话框也类似,只需要定义框上文字,以及默认的打开路径即可。
     QfileName=QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());//默认从当前路径打开文件
     qDebug()<<QfileName;

     if(QfileName.isEmpty())
     {
       QMessageBox::information(this,"Error","Plese input a file");
       return;
     }
     else {
         //利用流读文件,相较其他方式,比较快的一种。
       QFile *file=new QFile;
       file->setFileName(QfileName);//读入的文件名
       bool ok=file->open(QIODevice::ReadOnly);//判断是都打开成功,并设置打开条件
       if(ok)
       {
            QTextStream in(file); // 定义文件读入流
            ui->textEdit->setText(in.readAll());//一次性读入,并传入到textEdit里
            file->close();//new 和 delete 是一起使用的
            this->setWindowTitle(QfileName);
            delete file;//QCore 的内容要自己删除
       }
       else {

            QMessageBox::information(this,"Error","file Error!");
       }
     }
 }
void MainWindow::saveActionSlot()
//如果全局变量QfileName已经有名字,即要么是新打开的文件,要么是已经存储过的文件,那么这个文件已经存在
//不需要重新新建文件。转而直接打开文件并输入内容即可。
//如果文件名为空,表示从未存储到硬盘过,那么就调用saveAsActionSlot(),将文件存储到硬盘
{
    if(QfileName.isEmpty())
    {
        this->saveAsActionSlot();
    }
    else{
        QFile *file=new QFile;
        file->setFileName(QfileName);
        bool ok=file->open(QIODevice::WriteOnly);
        if(ok)
        {
            QTextStream out(file);
            out<<ui->textEdit->toPlainText();
            file->close();
            delete file;
        }
        else {
            QMessageBox::information(this,"Open Error!","Can not open this file!");

        }
    }
}

void MainWindow::saveAsActionSlot()
{
    //saveAsActionSlot()一定是重新保存文件,所以一定会需要新定义文件名。
    //定义文件名后就相当于此文件变成了新保存的文件,那么文件的窗口也需要setWindowTitle(),来重新定义一下。
    QfileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
    if(QfileName.isEmpty())
    {
        QMessageBox::information(this,"Error!","Input a name!");

    }
    else {
        QFile *file=new QFile;
        file->setFileName(QfileName);
        bool ok=file->open(QIODevice::WriteOnly);
        if(ok)
        {
            QTextStream out(file);
            out<<ui->textEdit->toPlainText();
            file->close();
            this->setWindowTitle(QfileName);
            delete file;
        }
        else {
            QMessageBox::warning(this,"waring!","File Open Error!");

        }

    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

//MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QMessageBox>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void callActionSlot();//新建
    void openActionSlot();//新建
    void saveAsActionSlot();//新建
    void saveActionSlot();//新建

private:
    Ui::MainWindow *ui;
    QString QfileName;//新建
};

#endif // MAINWINDOW_H

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值