(7)在点击 新建 的时候把文本编辑框里的内容存到txt文件里

教程新宠
从基础篇2开始看 能学到不少新东西。不过这个里面的警告对话框的创建没有视频教程那边的简洁。

新建之前 编辑框里无内容
新建之前 编辑框里有内容
右上角叉掉
存过
没存过
鼠标点击新建
无操作 而且本来就空白的
弹窗问要不要保存
永别
后台判断之前有没有存过
保存
设置文件名

在这里插入图片描述

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();


    void newFile();//新建
    void maybeSave();//是否要保存
    void save();
    	void saveAs();//另存为 【设个名字再调用savefile(fileName);
    	void savefile(const QString &fileName);//实际上进行保存的函数

private slots:
    void on_action_n_triggered();

private:
    Ui::MainWindow *ui;

    bool isUntitled;//true:没保存过
    QString curfile;//当前文件路径
    int countFornew;//数新建的次数
};

#endif // MAINWINDOW_H

没有完全照教程的写。缺失一些【打开失败】的判断和处理。不过代码少一丢丢可能好理解一丢丢。【当然,其实也差不了很多,我后续还是会补上的】

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMessageBox> //是否要保存的对话框
#include<QFileDialog> //保存文件名时打开的文件路径对话框
#include<QFile>//保存文件
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    isUntitled=true;
    curfile=tr("未命名.txt");
    setWindowTitle(curfile);
}

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

void MainWindow::newFile()
{

    maybeSave();//新建之前要先问问要不要保存

    isUntitled=true;
    curfile = QString("新建文档%1 ") .arg(countFornew);
    setWindowTitle(curfile);

    ui->textEdit->clear();
    //ui->textEdit->setVisible(true);//这句是让文本框可见 注释掉也没事,但不能写false

}
void MainWindow::maybeSave()
{
   if(ui->textEdit->document()->isModified())
   {
       int re = QMessageBox::question(this,"警告","先保存不?",QMessageBox::Ok,QMessageBox::Close);
       qDebug()<<"按下了"<<re;

       if(re==QMessageBox::Ok)
       {
           save();
       }
       else //对话框右上角的叉叉默认和no close那些宏的按钮一样,但如果只选用ok和apply这种按钮,右上角叉叉直接不能点
       {
           qDebug()<<"永别了,我所创造的垃圾";//我的妈呀,右上角关掉对话框居然是弹到这里
       }

   }
   else
       qDebug()<<"啥也没改,不用存 直接新建";
}
void MainWindow::save()
{
    if(isUntitled)
        saveAs();//找个地方给你存
    else
        savefile(curfile);//更新保存文件
}

void MainWindow::saveAs()
{
    QString fileName = QFileDialog::getSaveFileName(this);//打开了选文件的那种路径窗口
    savefile(fileName);//保存文件
}
void MainWindow::savefile(const QString &fileName)
{
    QFile file(fileName);//file创一个文件,名字设定好

    file.open(QFile::WriteOnly|QFile::Text);//按写入方式打开
    QTextStream out(&file);//将界面里的内容写进文件里

    QApplication::setOverrideCursor(Qt::WaitCursor);//鼠标指针转圈圈
    out<<ui->textEdit->toPlainText();//传输中,要一会
    QApplication::restoreOverrideCursor();//鼠标指针恢复

    isUntitled=false;//以后不用另存为了

    curfile=QFileInfo(fileName).canonicalFilePath();//获取路径
    setWindowTitle(curfile);

}
//【新建】的槽函数
void MainWindow::on_action_n_triggered()
{
    countFornew++;
    newFile();
}

想知道 Qt对话框右上角关闭返回的是哪个宏 的时候找的教程

QT QString 很全的使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值