QT案例IDE编写 -- 通过枚举实现编码切换

简介: QT案例IDE编写 -- 通过枚举实现编码切换

一、定义一个枚举


enum MyCode
{
    utf_8,gbk
};


二、定义一个枚举变量,默认设置为utf_8


enum MyCode flag;
flag=utf_8;


三、设置编码按钮槽函数


void MainWindow::on_actionUTF8_triggered()
{
    flag=utf_8;
    ui->label->setText("当前以UTF8编码显示");
}
void MainWindow::on_actionGBK_triggered()
{
    flag=gbk;
    ui->label->setText("当前以GBK编码显示");
}


四、编写打开按钮槽函数


1、打开一个文件,获取文件目录


#include <QFileDialog>  //文件对话框
QString path=QFileDialog::getOpenFileName();//获取文件路径
    if(path.isEmpty()) //如果路径是空,跳出
    {
        return;
    }

2、将Qstring转换为char *,fopen需要char *


 

std::string str=path.toStdString();
       const char *filename=str.c_str();
解决中文路径
    std::string str=code->fromUnicode(path).data();
    const char *filename=str.c_str();

3、打开文件,如果有中文,需要转换gbk


FILE *fp;
    errno_t err;
    if((err=fopen_s(&fp,filename,"rb"))!=0)
    {
        cout <<"打开文件失败";
        cout <<err;
        return;
    }
    cout <<"打开文件成功";


4、循环读取文件内容,每次读取一行fgets()


char buf[1024];
    QString str1="";
    while (1) {
        memset(buf,0,sizeof (buf));
        fgets(buf,sizeof (buf),fp);
        if(flag==utf_8){  //判定是那种编码,并显示出来
            str1=str1+buf;
        }else if (flag==gbk){
            str1=str1+code->toUnicode(buf);
        }
        if(feof(fp)){
            break;
        }


需要注意的事项:


(1) 包含头文件 #include <QTextCodec>


(2) 定义全局变量 QTextCodec *codec;


(3) 构造函数内部初始化:


codec = QTextCodec::codecForName("GBK");


(4) gbk > utf-8:codec->toUnicode()


(5) utf-8 > gbk: codec->fromUnicode()

目录
相关文章
|
7月前
|
IDE 开发工具 C++
QT案例IDE编写 -- 创建项目
QT案例IDE编写 -- 创建项目
87 0
|
5月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
797 7
|
4月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
106 4
|
5月前
|
开发者
Qt中的事件该如何学习?(附带案例)
事件是Qt中比较重要的一部分,在初期如果理解不当学习可能会比较困难,这里提一嘴当初教我的那位老师水平是真的高,让我很轻易的就理解了事件的概念。 在平时我们见到那些界面上的某些快捷键就有可能是事件做的,例如ESC关闭窗口,Enter提交或者登录这种类似的,这也是事件的强大之处。
129 0
|
7月前
|
自然语言处理 IDE 开发工具
利用codeGeex在IDE中自动写注释、自动补充简单编码。
利用codeGeex在IDE中自动写注释、自动补充简单编码。
247 2
|
7月前
|
SQL 存储 算法
Qt编码之谜:乱码问题的成因与解决策略
Qt编码之谜:乱码问题的成因与解决策略
238 0
|
7月前
|
存储 缓存
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
221 0