1. ChildFile.h
#ifndef CHILDFILE_H
#define CHILDFILE_H
#include <QWidget>
//#include <QtCore/QStringList>
/*
文件打开,另存,读取
*/
class ChildFile
{
public:
ChildFile(QWidget *parent);
~ChildFile();
QString FileSelect();
QString FileSaveAs(QStringList content);
private:
QWidget *window= nullptr;//父窗口 上下文
};
#endif // CHILDFILE_H
2.ChildFile.cpp
#include "childfile.h"
#include <QWidget>
#include <QFile>
#include <QDesktopServices>
#include <QUrl>
#include <QDebug>
#include <QFileDialog>
#include <QApplication>
#include <QMainWindow>
#include "QtWidgets"
ChildFile::ChildFile(QWidget *parent)
{
this->window=parent;
}
/*文件 选择+读取,返回字符串*/
QString ChildFile::FileSelect()
{
QString reStr="";
QString fileName = QFileDialog ::getOpenFileName(this->window,this->window->tr("选择文件"),"./",this->window->tr("json files(*.json *.txt,*.md);;All files (*.*)"));
if(fileName.isEmpty())
{
QMessageBox mesg;
mesg.warning(this->window,"警告","打开文件失败");
return "";
}
else
{
QString line;
QTextCodec * code =QTextCodec::codecForLocale();
QFile file(fileName);
file.open(QIODevice::ReadOnly);//IO_ReadOnly
QTextStream stream(&file);
stream.setCodec(code);
while (stream.atEnd()==0)
{
line=stream.readAll();
}
QMessageBox alert;
alert.warning(this->window,"提示","读取完成");
reStr=line;
return reStr;
}
}
/*
文件另存为
*/
QString ChildFile::FileSaveAs(QStringList content)
{
QString reStr="";
QStringList destinContent;
destinContent=content;
QString filePath;
QDateTime time=QDateTime::currentDateTime();
QString timeHead=time.toString("yyyyMMddHHmmss");
int randNumber= rand()*100;
QString destinFileName;
destinFileName=timeHead+"_"+QString::number(randNumber)+"_"+"dltc.json";
filePath=QFileDialog::getSaveFileName(this->window,this->window->tr("另存为"),destinFileName,this->window->tr("dltc(*.json)"));
// reStr=destinFileName+".json";//返回文件全路径+文件名
reStr=destinFileName;//返回文件全路径+文件名
if(!filePath.isNull())
{
QFile file(filePath);
if(file.open(QIODevice::WriteOnly))
{
QTextStream stream(&file);
for(QStringList::Iterator it = destinContent.begin();it !=destinContent.end();++it)
stream <<*it <<"\n";
file.close();
}
QMessageBox::information(this->window,"信息","保存成功");
}
else
{
QMessageBox::information(this->window,"信息","保存失败,您取消了保存");
}
return reStr;
}
3.mainwindow 中调用
3.1 头部引用
#include "childtarget.h"
3.2 调用代码
a.选择文件
ChildFile * childfile =new ChildFile(this->window); //重点说明 此处 如果是在mainwindow 中直接定this,重点是要将文件弹出窗口父窗口的指针传入
QString content= childfile->FileSelect();
// childfile->~ChildFile();
//ui->textBrowsercontent->setText(content);
// QMessageBox::information(this,"单独插件-文件选取","文件选择结束");
return content;
b.另存为
QStringList destinContent;
destinContent.append(content);
// destinContent<<ui->textBrowsercontent->toPlainText();
ChildFile *childfile =new ChildFile(this->window);//重点说明,此处如果是Mainwidnow 应当是this,总之要将另存为父窗体的指针传入
QString reStr= childfile->FileSaveAs(destinContent);
// QMessageBox::information(this,"单独插件-文件另存为","创建成功,文件名:"+reStr);
return reStr;
如果实在是太懒可以下载源码Demo: