QT-QString與Qchar

QT是一個跨平臺的框架
它封裝了一個QString類來表明字符串,它是一個Unicode16編碼的類 (每一個字符佔兩個字節)
同時封裝了一個QChar類表明寬字符數組

默認亂碼:
QString 框架


//亂碼演示ssh

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

//正確中文顯示演示
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 ->意味着以上都是扯蛋
ui

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

獲取用戶輸入並轉成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(); //返回字節數
this

-----------------編碼


使用QTextCodec
QTextCodec用於手工轉換編碼 (QString內部調用此類)
//QString(Unicode)->std::string(GBK)
static string FromUnicode(const QString& qstr) //
{
QTextCode* pCodec=QTextCodec::codecForName("gb2312"); //("GBK") QT工具類
if(!pCodec)return"";spa

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封裝
相關文章
相關標籤/搜索