教程新宠
从基础篇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();
}