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()


目录
相关文章
|
14天前
|
IDE 开发工具 C++
QT案例IDE编写 -- 创建项目
QT案例IDE编写 -- 创建项目
29 0
|
14天前
|
Windows
|
14天前
|
SQL 存储 算法
Qt编码之谜:乱码问题的成因与解决策略
Qt编码之谜:乱码问题的成因与解决策略
46 0
|
14天前
|
存储 缓存
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
【Qt 全局属性相关】 Qt 应用程序行为的全局属性 Qt::ApplicationAttribute枚举解析
41 0
|
14天前
|
人工智能 IDE API
灵动指尖 :阿里云智能编码插件 更好的为IDE内置社区服务
灵动指尖 :阿里云智能编码插件 更好的为IDE内置社区服务
279 0
|
14天前
|
编解码 IDE 开发工具
QT案例IDE编写 -- 另存为操作及编辑操作
QT案例IDE编写 -- 另存为操作及编辑操作
29 0
|
14天前
|
存储 自然语言处理
QT案例词典 -- 存储内容及遍历
QT案例词典 -- 存储内容及遍历
14 1
|
14天前
|
自然语言处理
QT案例词典 -- 释放堆区空间及查询单词
QT案例词典 -- 释放堆区空间及查询单词
21 1

推荐镜像

更多