首页 > 代码库 > QT-QString与Qchar

QT-QString与Qchar

QT是一个跨平台的框架
它封装了一个QString类来代表字符串,它是一个Unicode16编码的类 (每个字符占两个字节)
同时封装了一个QChar类代表宽字符

默认乱码:
QString


//乱码演示

/*QString str = "你好!世界"; //cpp是GBK编码,不能直接给QString
ui.linetxt->setText(str); *

//正确中文显示演示
QString str = QString::fromLocal8Bit("你好!世界");//用QString 下的 fromLocal8Bit()函数把中文转换成QString
ui.linetxt->setText(str)

 

 

QString text = ui.linetxt->text(); //获取用户输入
QByteArray bytes = text.toLocal8Bit(); //转换成QByteArray类型(Local8Bit是GBK的一个编码)
//QByteArray是QT封装字节数组的一个类
const char *gbk = bytes.data(); //取得bytes里的数据首地址 用常量字符指针gbk指向它

//由于我们使用的系统是中文Windows,所以本地编码就是GBK
//然而,如果我们的系统是Linux,那本地编码很可能是UTF-8 ->意味着以上都是扯蛋

------------------------------------------------------------------------------

获取用户输入并转成UTF8
QString text = ui.linetxt->text(); //获取用户输入
QByteArray bytes = text.toUtf8(); //转换成QByteArray类型(Local8Bit是GBK的一个编码)
//QByteArray是QT封装字节数组的一个类
const char *gbk = bytes.data(); //取得bytes里的数据首地址 用常量字符指针gbk指向它
int size = bytes.size(); //返回字节数

-----------------


使用QTextCodec
QTextCodec用于手工转换编码 (QString内部调用此类)
//QString(Unicode)->std::string(GBK)
static string FromUnicode(const QString& qstr) //
{
QTextCode* pCodec=QTextCodec::codecForName("gb2312"); //("GBK") QT工具类
if(!pCodec)return"";

QByteArray arr=pCodec->fromUnicode(qstr); //把qstr转换成字节数组
string cstr=arr.data() //再把它封装成string类型
return cstr;

}

 

 

#include "qtchinesesshow.h"#include"QTGBK.h"QTChinesesShow::QTChinesesShow(QWidget *parent)    : QMainWindow(parent){    ui.setupUi(this);    connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(OnBtnTest()));    //鼠标点击btnOK执行OnBtTest()}QTChinesesShow::~QTChinesesShow(){}int QTChinesesShow::OnBtnTest(){    //100%乱码演示    /*QString str = "你好!世界";    //cpp是GBK编码,不能直接给QString    ui.linetxt->setText(str);    */      //正确中文显示演示    //GBK->QString(Unicode16)    //QString str = QString::fromLocal8Bit("你好!世界");//用QString 下的 fromLocal8Bit()函数把中文转换成QString     //ui.linetxt->setText(str);    //显示    //------------------------------------------    //QString->GBK            Unicpde16转换成GBK                    //QString text = ui.linetxt->text();        //获取用户输入    //QByteArray bytes = text.toUtf8();    //转换成QByteArray类型(Local8Bit是GBK的一个编码)    //                                        //QByteArray是QT封装字节数组的一个类    //const char *gbk = bytes.data();        //取得bytes里的数据首地址 用常量字符指针gbk指向它    //int size = bytes.size();         //由于我们使用的系统是中文Windows,所以本地编码就是GBK    //然而,如果我们的系统是Linux,那本地编码很可能是UTF-8    ->意味着以上都是扯蛋    //使用UTF8    //char utf8[] = { 0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD, 0 };    //QString str2 = QString::fromUtf8(utf8);    string text = GBK::FromUnicode(ui.linetxt->text());    return 0;}

///////////////////////////////////////////////////////

 

技术分享
//    封装 #ifndef _QT_GBK_H#define _QT_GBK_H#include<QString>#include<QTextCodec>#include<string>using std::string;class GBK{public:    static string FromUnicode(const QString& qstr)    {        QTextCodec* pCodec = QTextCodec::codecForName("gb2312");        if (!pCodec)return "";        QByteArray arr = pCodec->fromUnicode(qstr);        string cstr=arr.data();        return cstr;    }    static QString ToUnicode(const string& cstr)    //QBT转换QString    {        QTextCodec* pCodec = QTextCodec::codecForName("gb2312");        if (!pCodec)return "";        QString qstr = pCodec->toUnicode(cstr.c_str(), cstr.length());        return qstr;    }};#endif//使用::    QString str = GBK::ToUnicode("你好中国");    ui.linetxt->setText(str);    //uilinetxt->setText(GBK::ToUnicode("你好中国"))        string text = GBK::FromUnicode(ui.linetxt->text());//获取用户输入
GBK转QString封装

 

QT-QString与Qchar