qt解决编码问题

引入

先在一个路径下,创建两个文本文件,分别为 utf-8 和 ANSI 类型、


使用我们的记事本打开,发现会ANSI格式的会乱码,那是因为 代码里面我们指定了编码类型为 UTF-8


so 这些写死编码格式是不安全的,会打开不同类型的文件时候出现乱码

接下来看看我们怎么解决的吧
===============================

QTextStream

QTextStream 常用的字符编码

在 Qt 中, QTextStream 常用的字符编码主要包括以下几种:

这些编码覆盖了大部分常用的语言字符集,可以通过 QTextCodec::codecForName() 方法在
QTextStream 中进行设置

检测光标位置,并在右下角显示光标位置

在程序左上方显示当前打开的文件名称

====================================


QComboBox  -- 解决上面选择编码的问题

QComboBox 是 Qt 框架中用于创建下拉列表的一个控件。
它允许用户从一组选项中选择一个选项,并可以配置为可编辑,使用户能够在其中输入文本。
QComboBox 提供了一系列方法来添加、删除和修改列表中的项,支持通过索引或文本检索项,并可以通过信号和槽机制来响应用户的选择变化。该控件广泛应用于需要从多个选项中进行选择的用户界面场景,例如表单和设置界面。

QComboBox 常用API


case: 简单使用:


Widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(onCurrentIndexChanged(int)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onCurrentIndexChanged(int index)
{
  qDebug()<<index;
  qDebug()<<ui->comboBox->currentText();
}


Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
  void   onCurrentIndexChanged(int index);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H


====================================================

优化到记事本后,现象;


void Widget::onCurrentIndexChanged(int index)
{
 // 实现功能,对打开的文件修改编码类型,同时能实现重新生成文本框内容
 // 先清屏
 ui->textEdit->clear();
 if(qfile.isOpen()){ // 判断文件是否打开

     //这个函数与修改编码格式的信号绑定了,只能编码类型发生变化的情况下才会使用
     QTextStream in(&qfile); // 实例化对象 -- 来操作这个文件
      //修改对应的编码格式
     in.setCodec(ui->comboBox->currentText().toStdString().c_str());
     //将修改后的文本打印出来
     // 注意前面打开文件的时候,光标已经到了最后面,我们需要给光标复位一下
     qfile.seek(0);//光标复位 --> 回到文件头
     while(!in.atEnd()){
     QString context = in.readLine();
     ui->textEdit->append(context);
     }

 }

}

我们的还可以应用到更加复杂的场景中,比如这篇: 一个项目带你入门qt - 记事本(上)-CSDN博客


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值