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封装

时间: 2024-10-14 05:41:02

QT-QString与Qchar的相关文章

【转】QT QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转化

//QString to wchar_t *: const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileName.utf16()); //QString to char * given a file name: QByteArray fileName = QFile::encodeName(aFileName); const char * encodedName = fileName.constData(); //

【转载】Qt中的QString,QByteArray,Qchar, char*

先要说的是QString. 之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等一样的基本数据结构来实现的. 每一个GUI程序都需要string,这些string可以用在界面上的提示语,也可以用作一般的数据结构.C++语言提供了两种字符串的实现:C风格的 字符串,以'\0‘结尾:std::string,即标准模版库中的类.Qt则提供了自己的字符串实现:QString.QString以16位 U

QT QString 很全的使用 (转)

QString, QByteArray, 和 QVariant这三个类和容器有许多相同之处,并且在一些情况下可以被当作特殊的容器. 同样,像容器,这些类使用隐式共享来优化内存和速度. 我们将从QString开始. 字符串被每个GUI程序所使用,不仅是用户界面而且还有数据结构. C++原生提供两种字符串: 传统的C风格以'\0'结尾的字符数组和std::string类. 与这些不同,QString使用16-bit Unicode值. Unicode 包含 ASCII 和 Latin-1 这个子集和

Qt QString的arg()方法的使用

QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("%1:%2:%3").arg("12").arg("60").arg("60"); // m = "12:60:60: 它还有另外一种重载方法: QString QString::?arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar =

QT QString转char*,char*转QString;简单明了,看代码。

//原始QStringQString qs = QString::fromLocal8Bit("我的");std::string strQs = qs.toStdString(); int qs_size = qs.length();//长度为3int strQs_size = strQs.length();//长度8 //得到转换后的char*char* p = new char[strQs_size];memcpy(p, qs.toStdString().c_str(), strQ

Qt QString转char*

一.QString str; char *ch; QByteArray ba = str.toLatin1(); ch = ba.data(); 二.将QString转换为标准库string类型,然后将string转为char * QString name; std::string cstr = name.toStdString(); consr char *ch = str.c_str();

QT QString与char *之间的转换 【转载】

原文网址:http://blog.csdn.net/candyliuxj/article/details/6429208 1.QString转char * 先将QString转换为QByteArray,再将QByteArray转换为char *. 注意:不能用下面的转换形式char *mm = str.toLatin1().data();.因为这样的话,str.toLatin1()得到的QByteArray类型结果就不能保存,最后转换,mm的值就为空. 2. char * 转QString 可以

[qt]qstring和string中文支持转换问题

QString str2qstr(const string str) { return QString::fromLocal8Bit(str.data()); } string qstr2str(const QString qstr) { QByteArray cdata = qstr.toLocal8Bit(); return string(cdata); } 原文地址:https://www.cnblogs.com/lyggqm/p/9487858.html

QT QString 与 int 转化

QString 转换int : QString::toInt() int 转换 QString: int account = 123; QString stracc = QString::number(account); 原文地址:https://www.cnblogs.com/kkcoolest/p/11458343.html

Qt QString 与 QByteArray 的转换

QString转换为QByteArray 1 QByteArray byte; 2 QString string; 3 byte = string.toAscii(); QByteArray 转换为 QString 1 QByteArray byte; 2 QString string; 3 string = QString(byte); 原文地址:https://www.cnblogs.com/ybqjymy/p/12169773.html