0022:Qt常用類 - QString(01,QString的編碼方式和初始化)

1 開發環境

在介紹內容之前,先說明一下開發環境,如下圖:
在這裏插入圖片描述在這裏插入圖片描述
Qt版本:Qt5.3.2;
Qt開發工具:Qt Creater 3.2.1;
Qt構建工具:Desktop Qt 5.3 MinGW 32bit;
Qt開發平臺:Windows 7 64bit。

2 QString的編碼方式

在介紹QString的使用之前,先介紹一下QString的編碼方式。QString採用Unicode編碼方式,即:每一個字符用兩個字節來表示,當然這裏的每一個字符不是傳統C字符串中的ASCII字符,它涵蓋了更多的字符,比如:中文、俄文、日文等等。

Unicode是當前國際標準的編碼字符集,支持大多數的寫入系統,它是US-ASCII (ANSI X3.4-1986)字符集和Latin-1 (ISO 8859-1)字符集的超集。

3 QString

在學習QString之前,將QString的接口分爲初始化、增加、刪除、修改、查詢、遍歷、子字符串、格式化、比較和轉換共10類,這樣比較利於學習。由於QString的接口太多了,這裏將要學習的接口一併列出來,有個初步的認識,今天只介紹初始化的部分,後續會在博客中一類一類的介紹。

下面是這10類的接口。

//
//初始化
//
QString();
QString(const QChar * unicode, int size = -1);
QString(QChar ch);
QString(int size, QChar ch);
QString(const QString & other);
QString(const char * str);
QString &               operator=(const char * str);

//
//增加
//
QString &               append(const QString &str);
QString &               append(const QChar *str, int len);
QString &               append(QChar ch);
QString &               prepend(const QString &str);
QString &               prepend(QChar ch);
void                    push_back(const QString &str);
void                    push_back(QChar ch);
void                    push_front(const QString &str);
void                    push_front(QChar ch);
QString &               insert(int position, const QString &str);
QString &               insert(int position, const QChar *unicode, int size);
QString &               insert(int position, QChar ch);
QString &               operator+=(const QString &str);
QString &               operator+=(QChar ch);

//
//刪除
//
void                    clear();
void                    chop(int n);
QString &               remove(int position, int n);
QString &               remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &               remove(const QString &str, Qt::caseSensitivity cs = Qt::CaseSensitive);

//
//修改
//
QString &               fill(QChar ch, int size = -1);
QString &               replace(int position, int n, const QString &after);
QString &               replace(int position, int n, const QChar *unicode, int size);
QString &               replace(int position, int n, QChar after);
QString &               replace(const QString &before, const QString &after, Qt::CaseSensitivity cs);
QString &               replace(QChar ch, const QString &after, Qt::CaseSensitivity cs);
QString &               replace(QChar before, QChar after, Qt::CaseSensitivity);
void                    truncate(int position);
QString                 trimmed();
QString &               operator+=(const QString &other);
QString &               operator+=(QChar ch);

//
//查詢
//
bool                    contains(const QString &str, Qt::CaseSensitivity cs);
bool                    contains(QChar ch, Qt::CaseSensitivity cs);
bool                    endsWith(const QString &s, Qt::CaseSensitivity cs);
bool                    endsWith(QChar c, Qt::CaseSensitivity cs);
int                     indexOf(const QString &str, int from, Qt::CaseSensitivity cs);
int                     indexOf(QChar ch, int from, Qt::CaseSensitivity cs);
int                     lastIndexOf(const QString &str, int from, Qt::CaseSensitivity cs);
int                     lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs);
bool                    startsWith(const QString &s, Qt::CaseSensitivity cs);
bool                    startsWith(QChar ch, Qt::CaseSensitivity cs);

//
//遍歷
//
const_iterator          cbegin();
const_iterator          cend();
const QChar             at(int position) const;
QCharRef                operator[](int position);
const QChar             operator[](int position) const;

//
//子字符串
//
QString                 left(int n);
QString                 mid(int position, int n);
QString                 right(int n);
QStringList             split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs);
QStringList             split(QChar sep, SplitBehavior behavior, Qt::CaseSensitivity cs);

//
//格式化
//
一系列arg(...)的重載函數,可以再Qt Creater的幫助中,搜索QString關鍵字,查看關於arg()的函數及說明

//
//比較
//
int                     compare(const QString &other, Qt::CaseSensitivity cs);
int                     localeAwareCompare(const QString &other);
bool                    operator==(const char *other);
bool                    operator<(const char *other);
bool                    operator<=(const char *other);
bool                    operator>(const char *other);
bool                    operator>=(const char *other);

//
//轉換
//
//數字轉換
QString &               setNum(int n, int base = 10);
QString &	            setNum(uint n, int base = 10);
QString &	            setNum(long n, int base = 10);
QString &	            setNum(ulong n, int base = 10);
QString &	            setNum(qlonglong n, int base = 10);
QString &	            setNum(qulonglong n, int base = 10);
QString &	            setNum(short n, int base = 10);
QString &	            setNum(ushort n, int base = 10);
QString &	            setNum(double n, char format = 'g', int precision = 6);
QString &	            setNum(float n, char format = 'g', int precision = 6);
short                   toShort(bool * ok = 0, int base = 10) const;
int                     toInt(bool * ok = 0, int base = 10) const;
long                    toLong(bool * ok = 0, int base = 10) const;
qlonglong	            toLongLong(bool * ok = 0, int base = 10) const;
ushort                  toUShort(bool * ok = 0, int base = 10) const;
uint                    toUInt(bool * ok = 0, int base = 10) const;
ulong                   toULong(bool * ok = 0, int base = 10) const;
qulonglong              toULongLong(bool * ok = 0, int base = 10) const;
float                   toFloat(bool * ok = 0) const;
double                  toDouble(bool * ok = 0) const;
QString                 QString::number(long n, int base = 10);
QString                 QString::number(double n, char format = 'g', int precision = 6);
QString                 QString::number(ulong n, int base = 10);
QString                 QString::number(int n, int base = 10);
QString                 QString::number(uint n, int base = 10);
QString                 QString::number(qlonglong n, int base = 10);
QString                 QString::number(qulonglong n, int base = 10);

//編碼轉換
QString &               setRawData(const QChar * unicode, int size);
QString &               setUnicode(const QChar * unicode, int size);
QString &               setUtf16(const ushort * unicode, int size);
QByteArray              toUtf8() const;
QVector<uint>           toUcs4() const;
std::string             toStdString() const;
std::wstring            toStdWString() const;
int                     toWCharArray(wchar_t * array) const;
const QChar *           unicode() const;
const ushort *          utf16() const;
QString                 QString::fromRawData(const QChar * unicode, int size);
QString	                QString::fromStdString(const std::string & str);
QString	                QString::fromStdWString(const std::wstring & str);
QString	                QString::fromUcs4(const uint * unicode, int size = -1);
QString	                QString::fromUtf8(const char * str, int size = -1);
QString	                QString::fromUtf8(const QByteArray & str);
QString	                QString::fromUtf16(const ushort * unicode, int size = -1);
QString	                QString::fromWCharArray(const wchar_t * string, int size = -1);

//大小寫轉換
QString                 toLower() const;
QString                 toUpper() const;

下面介紹初始化接口的使用例程。

qDebug("--- string: 初始化 ---");

/*
 * QString()
 * QString(const QChar * unicode, int size = -1)
 * QString(QChar ch)
 * QString(int size, QChar ch)
 * QString(const QString & other)
 * QString(const char * str)
 * operator=(const char * str)
 */
//QString
QString str1;
qDebug("str1 is empty? %s", str1.isEmpty() ? "yes" : "no");

//QString(const QChar * unicode, int size = -1)
QChar *pCharNull = NULL;
QChar pCharNormal[10] = { '1', '2', '3', '4', '5', NASCII_UC("一"), NASCII_UC("二"), NASCII_UC("三"), NASCII_UC("四"), NASCII_UC("五") };
QChar pCharNullTerminated[11] = { '1', '2', '3', '4', '5', NASCII_UC("一"), NASCII_UC("二"), NASCII_UC("三"), NASCII_UC("四"), NASCII_UC("五"), 0 };
QString str2(pCharNull);                                            //If unicode is 0, a null string is constructed.
QString str3(pCharNormal, 10);
QString str4(pCharNullTerminated);                                  //If size is negative, unicode is assumed to point to
                                                                    //a nul-terminated array and its length is determined
                                                                    //dynamically. The terminating nul-character is not
                                                                    //considered part of the string.
qDebug("str2 is empty? %s", str2.isEmpty() ? "yes" : "no");
qDebug("str3 = %s, length = %d", qPrintableU8(str3), str3.length());
qDebug("str4 = %s, length = %d", qPrintableU8(str4), str4.length());
QMessageBox::question(this, "問題 - 標題", str4, "是", "否", "忽略", 0, 2);

//QString(QChar ch)
QString str5(pCharNormal[5]);
qDebug("str5 = %s, unicode = 0x%04X", qPrintableU8(str5), NASCII_UC(str5));

//QString(int size, QChar ch)
QString str6(10, pCharNormal[9]);
qDebug("str6 = %s, length = %d", qPrintableU8(str6), str6.length());

//QString(const QString &string)
//QString(const char * str)
//operator=(const char * str)
QString str7 = "12345一二三四五";
QString str8("12345一二三四五");
QString str9(str7);
qDebug("str7 = %s, length = %d", qPrintableU8(str7), str7.length());
qDebug("str8 = %s, length = %d", qPrintableU8(str8), str8.length());
qDebug("str9 = %s, length = %d", qPrintableU8(str9), str9.length());

在學習過程中,可以將上述代碼放到一個按鈕的響應函數中,以調試方式運行,就可以在Qt Creater中的應用程序輸出窗口看到輸出結果了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章