文件对话框---做一个简单的文本编译器(3)

在前面的基础上,把保存文件的功能完成,同时解决了中文的显示异常。

最终的原因,原来是QT与VS之间采用的字符编码不同,只要编写一个头文件,就可以实现所有中文问题的完美解决!

文件打开显示部分的改进代码

打开文件:

string gbk_name =GBK::FromUnicode(filepath);

fp =fopen(gbk_name.c_str(), "a+");

显示在EDIT上

ui.TextEdit->setPlainText(GBK::ToUnicode(ch));

 

 

保存文件

voidMyGUI::onBtnSaveClicked()

{

//选择要打开的文件

QStringfilepath = QFileDialog::getSaveFileName(

this,// 父窗口

GBK::ToUnicode("保存")// 标题caption

);

 

//为空时表示用户取消了操作,没有选中任何文件

if(filepath.length() > 0)

{

QStringtext = ui.TextEdit->toPlainText();

stringgbk_text = GBK::FromUnicode(text);

stringgbk_filename = GBK::FromUnicode(filepath);

 

FILE*fp = fopen(gbk_filename.c_str(), "wb");

fwrite(gbk_text.c_str(),1, gbk_text.length(), fp);

fclose(fp);  // 关闭文件

}

 

 

需要额外添加的头文件文 GBK.h

 

#ifndef_QT_GBK_H

#define_QT_GBK_H

 

#include<QString>

#include<QTextCodec>

#include<string>

usingstd::string;

 

classGBK

{

public:

//QString(Unicode) -> std::string (GBK)

staticstring FromUnicode(const QString& qstr)

{

QTextCodec*pCodec = QTextCodec::codecForName("gb2312");

if(!pCodec)return "";        

 

QByteArrayarr = pCodec->fromUnicode(qstr);

stringcstr = arr.data();

returncstr;

}

 

//std::string (GBK) -> QString(Unicode)

staticQString ToUnicode(const string& cstr)

{

QTextCodec*pCodec = QTextCodec::codecForName("gb2312");

if(!pCodec)return "";

 

QStringqstr = pCodec->toUnicode(cstr.c_str(), cstr.length());

returnqstr;

}

 

};

#endif

 

 

效果图:

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值