写文件:两种方法
1.第一种使用QString获取编辑区的内容之后直接用toUtf8()转化为QByteArray
2.第二种使用QString获取编辑区的内容之后先转化成std::string,再转换成char*,不过最后的文件类型都是UTF-8类型
但是最后都要记得要 file.close();来关闭文件!!
void Widget::forWrite()
{
QString path=QFileDialog::getSaveFileName(this,"保存文件","../","TXT(*.txt)");
if(!path.isEmpty())
{
//创建文件对象
QFile file;
//关联文件名字
file.setFileName(path);
//打开文件,只写方式
bool isok=file.open(QIODevice::WriteOnly);
if(isok==true)
{
//获取编辑区内容
QString str=ui->text->toPlainText();
//写文件
//写文件操作的时候需要把QString类型转换成QByteArray
file.write(str.toUtf8());
/*换一种方法先把QString转换成std::string再转换成char*
* file.write(str.toString().data());
* 不过这样最后转换的txt文件依然是UTF-8类型
*/
}
file.close();
}
}
运行:
点写文件按钮
------------------------------------------------------------------------------
读取文件:两种方法
1.直接全部打开,使用QByteArray array=file.readAll(),再把array转化为QString类型打印在编辑区
2.一行行的打开,while (file.atEnd()==false){array+=file.readLine();},最后也把array转化为QString类型打印在编辑区
但是最后都要记得要 file.close();来关闭文件!!
还有很重要的一点:读文件,默认只识别utf-8编码,就是所打开文件必须UTF-8编码类型的,否则打开是乱码,像GB2312就不能直接这样打开
void Widget::forRead()
{
QString path=QFileDialog::getOpenFileName(this,"读取文件","../","TXT(*.txt)");
if(path.isEmpty()==false)
{
//创建文件对象
QFile file(path);
//打开文件,只读方式
bool isok=file.open(QIODevice::ReadOnly);
if(isok==true)
{
/*
//读文件,默认只识别utf-8编码,就是所打开文件必须UTF-8编码类型的,否则打开是乱码,像GB2312就不能直接这样打开
QByteArray array=file.readAll();
//显示到编辑区
ui->text->setText(QString(array));//直接显示也可以,他会有一个内部的默认转换 ui->text->setText(array);
*/
//另一种方式来一行行的读取文件
QByteArray array;
while (file.atEnd()==false)
{
array+=file.readLine();
}
ui->text->setText(array);
}
//关闭文件
file.close();
}
}
运行:
点击读文件按钮
-----------------------------------------------------------------------------------
把QString转化成QByteArray的几种方法:toUtf8()针对中文,toLocal8Bit()转换成本地编码(ANSI等根据系统而定,详见最后一张图)
//把QString转化成QByteArray的几种方法
QString buf="真的爱你";
QByteArray a=buf.toUtf8();//主要是针对有中文的时候
a=buf.toLocal8Bit();//转换成本地编码
------------------------------------------------------------------------------------
把QByteArray转化成char*:data函数
//把QByteArray转化成char*
char*b=a.data();
-------------------------------------------------------------------
char*转化成Qstring:直接使用QString的构造函数
//char*转化成QString
char*p="meeting you while i am missing you";
QString qs=QString(p);
------------------------------------------------------------------------
转换成本地编码
file.write(str.toLocal8Bit());