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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM