【Qt学习笔记】6.Qt中的字符、字符串

一、字符集

字符集是一个人为的规定,人们先用一个小册子规定好了“文字字符”与“数字”的对应关系。

七种,每一个字符对应的数字,也成为该字符的编码。例如,ASCII码表就是一个字符集, ‘A‘字符对应的编码是65

ASCII: 0 ~ 127,最高位为0

拉丁字符集:最高位为1

Unicode

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案

Unicode用数字0 ~ 0x10FFFF来映射这些字符,最多可以容纳1114112个字符

是一个超大的字符集

Unicode有三种编码方案

1、UTF-32编码

每个字符用一个int来表示,简单,但很浪费空间

2、UTF-16编码

用1~2个short来表示一个字符

3、UTF-8编码

用1~4个字节来表示一个字符

Windows默认是GBK编码,Linux默认是UTF-8编码

VC下的转换方法:

VC中,用wchar_t代表宽字符,相当于short型。一个 wchar_t 的数组来存放unicode字符

二、Qt中的字符、字符串

Qt作为一个跨平台的框架,设计之初就考虑了字符的问题;

它封装了一个QString代表字符串,它是UTF-16编码的类,同时封装了一个QChar类代表宽字符;

这时就有一个问题:VS下的编码方式是GBK

因此像下面这样直接将字符串赋值给QString的话:

	QString str = "一段中文";
	ui.lineEdit->setText(str);

运行出来结果就会这样:

因此需要对字符串进行转码:

	QString qstr = QString::fromLocal8Bit("一段中文");

Qt框架提供的转码的方式如下:

//GBK --> QString
QString QString::fromLocal8Bit(const char* str);

//QString --> GBK
QByteArray bytes = text.toLocal8bit();

//UTF-8 --> QString
QString QString::fromUtf8(const char* str);

//QString --> UTF-8
QByteArray bytes = text.toUtf8();

但注意,上面介绍的前两个 Local 转码的方法,并不保险,跨平台性不佳

所以最好用UTF8,给以后的自己少挖几个坑

使用QTextCodec

QTextCodec用于手工转换编码(QString内部调用此类)

可以在QString 和 std::string 之间相互转换

三、发布程序

当程序中带有中文转换处理时,需要将Qt使用的文字编码库一同发布

Windows下QT应用程序:

1:找到Qt的编码库   Qt\x.x.x\plugins\codecs

2:拷贝codecs这个文件夹,放到目标exe文件所在目录下

3:把VS的运行时库拷贝到codecs目录下

——————————————

尾巴

中文问题的解决,GBK通常用于单机的应用程序,UTF-8适用于大型跨平台系统、网络传输,一般大型应用系统统一使用UTF-8编码

时间: 2024-10-15 21:06:25

【Qt学习笔记】6.Qt中的字符、字符串的相关文章

Qt学习笔记:Qt中使用Lua

今天想在Qt中使用Lua进行数据操作 结果发现在Qt中使用Lua的文章较少,虽然很简单,但是还是写出来提供入门,顺便记录一下 我使用的是Qt Creator 3.4.2,用的是mingw4.9.2的编译器 我在Lua官网下载lua版本是5.3.1 首先,在要Qt中进行编译Lua,拿到.a和dll这两个文件 在Qt Creator->文件->新建文件或项目->Library->C++库,接下来根据情况一路下一步完成创建 然后,右键自己的项目,选择添加现有文件,添加下载好的Lua文件中

Qt学习笔记-嵌入式qt程序支持显示中文

移植后得qt程序在开发板上运行时无法显示中文. 拷贝windows中的字体也不行. 从网上找到方法. 添加以下代码:需要头文件  #include <QTextCodec> QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); //支持Tr中文 QText

QT学习笔记_Hello QT!

纠结了一番还是觉得swing太..还是撸QT吧 不过QT貌似也不是盖的,光配置环境弄了老半天.. 这次先输出hello QT ! 不过运行后的框太小了 ,虽然可以自己放大,但初始化不知道可不可以调? 慢慢来.. 输出部分使用了HTML 修改字体及颜色,居然可以混合HTML 这是极好的 #include <QApplication> #include <QLabel> int main(int argc,char *argv[]) { QApplication app(argc,ar

【Qt学习笔记】13.拖放技术:Drag & Drop

1.接受拖放 Drag & Drop 是一个界面操作,用于在两个窗口间传递数据. Drag Source: 拖放源窗口 Drag Target: 拖放目标窗口 拖放操作: 1.在源窗口:选中目标,按下鼠标,移动,拖至目标窗口(Drag) 2.在目标窗口:取消鼠标,到指定位置,松开鼠标(Drop) (按下ESC取消操作) MIME: MIME(Multipurpose Internet Mail Extensions)被传递的数据以MIME格式传送,它是多组type-data数据:(type0,

QT学习笔记—1

1.模态和非模态的区别:非模态可以同时操作两个窗口,模态的只能在顶层窗口关闭之后才能使用其他窗口 //同时显示出widget和dialog窗口,非模态     QDialog *dialog = new QDialog(this);     dialog->show(); //同时显示出widget和dialog窗口,模态     QDialog *dialog = new QDialog(this);     dialog->setModal(true);     dialog->sh

Qt学习笔记-Widget布局管理

Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,finddialog.h,finddialog.cpp及main.cpp. //finddialog.h代码 #ifndef FINDDIALOG_H#define FINDDIALOG_H #include <QDialog> class QCheckBox;class QLabel;class QLineE

【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局

一.窗体 在Qt中,把窗体(口)叫做Widget. Widget可以是主窗体(口),也可以是依附在主窗体(口)上的各种控件,作为子窗体,这两种窗口,分别称作顶级窗口(top-level widget)和子窗口(sub widget). 顶级窗口:一个标准的窗口,带边框.标题栏.若干按钮.(独立) 子窗口:在窗口里面的窗口,例如:按钮.文本框等控件.(不独立,随着父窗口移动) 注意: 1.每个子窗口都有一个父窗口 2.子窗口里面可能包含了若干子窗口,是一层一层的关系. 3.顶级窗口也有父窗口:就是

qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏,主机是mini2440,分辨率是800*480,程序写比較粗糙,但对刚開始学习的人还是有一点启示,大家一起进步. qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem的子类 分辨创建它们的实

QT学习笔记(1)

采用QT创建一个GUI的应用程序时,都必须包含一个QApplication的对象,而对于非GUI的QT程序,可以使用不依赖QtGui库的QApplication QT的主要类: QLable                   标签类 QPushButton          按钮类 QVBoxLayout          竖布局管理器类 QHBoxLayout          横布局管理器类 QWidget                 窗口部件类 QGridLayout        

MVC4 学习笔记 之 URL中存在编译的空格 20%20%

/Config/Edit/QQCC%20%20%20%20%20%20%20 原因是: 通过EF直接添加了空格? NO 是因为你的数据库字段设计问题,因为你当然设计如>:sID nchar(10) 那你一定想输入10个字符,但实际你只输入了必个,所以后面数据自动帮你补空了. 从EF数据库取出数据,在绑定的时候为安全,编码了,所以显示%20,代表一个空格. MVC4 学习笔记 之 URL中存在编译的空格 20%20%,布布扣,bubuko.com