打开和保存文件时调用的对话框,主要利用QFileDialog类下的静态成员getOpenFileName()和getSaveFileName()。
// 做一个简单的文本编辑器 使其具有打开文件和保存的功能
// 打开:读取文件并显示 保存:输入一个新文件并保存
#include "Qt7_2A.h"
#include<QFileDialog>
#include<QDebug>
#include"GBK.h"
Qt7_2A::Qt7_2A(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//建立两个按钮的信号与槽的连接
connect(ui.btnOpen,SIGNAL(clicked()),this,SLOT(OnbtnOpen()));
connect(ui.btnSave, SIGNAL(clicked()), this, SLOT(OnbtnSave()));
}
int Qt7_2A::OnbtnOpen() // “打开”按钮的处理函数
{
// 当用户选择打开按钮后,通过QFileDialog类下的静态成员getOpenFileName()函数进行文件选择
// getOpenFileName()两个参数,一个表示父类 一个表示标题
QString filepath = QFileDialog::getOpenFileName(this, GBK::ToUnicode("选择文件"));
//
if (filepath.length() > 0)
{
qDebug() << filepath; // 显示文件路径
string gbk_name = GBK::FromUnicode(filepath);
// 打开文件,读取内容
FILE* fp = fopen(gbk_name.c_str(),"rb");
// 获得文件大小
fseek(fp, 0, SEEK_END);
int filesize = ftell(fp);
// 读取内容
fseek(fp,0,SEEK_SET);
char* buf = new char[filesize + 1];
int n = fread(buf,1,filesize,fp);
if (n > 0)
{
buf[n] = 0;
//显示到界面文本框中
ui.plainTextEdit->setPlainText(GBK::ToUnicode(buf));
}
delete[] buf; // 释放内存
fclose(fp);
}
return 0;
}
int Qt7_2A::OnbtnSave()//“保存”按钮的处理函数
{
// 保存一个文本文件 和打开类似
QString filepath = QFileDialog::getSaveFileName(this, GBK::ToUnicode("保存文件"));
//
if (filepath.length() > 0)
{
// 首先获得文本框内的文本信息
QString text = ui.plainTextEdit->toPlainText();
string gbk_text = GBK::FromUnicode(text);// 转换成GBK
string gbk_filename = GBK::FromUnicode(filepath);
// 打开文件
FILE* fp = fopen(gbk_filename.c_str(), "wb");
fwrite(gbk_text.c_str(),1,gbk_text.length(),fp);
fclose(fp);//关闭文件
}
return 0;
}