引入
先在一个路径下,创建两个文本文件,分别为 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博客