9-Qt6 QString和QChar
QString類存儲字符串采用的是Unicode碼,每一個字符都是16位的QChar類對象(2個字節),而不是8位的char類型字符,所以QString類用于處理中文字符沒有問題,而且一個漢字算作一一個字符。
作為后起之秀,QString類有 如下特點:
(1)采用Unicode編碼,所以一個QChar類對象占用兩個字節。
(2)使用隱式共享技術來節省內存和減少不必要的數據備份。
(3)跨平臺使用,不用考慮字符串的平臺兼容性。
(4) QString類直接支持字符串和數字之間的相互轉換。
(5) QString類 直接支持字符串之間的大小比較(按照字典順序)。
(6) QString類直接支持不同編碼下的字符串轉換。
(7) QString類 直接支持std: :string和std: :wstring之間的相互轉換。
?(8) QString類 直接支持正則表達式的使用。
Qt::CaseInsensitive 表示指明不區分大小寫,需要時形參指定即可。
以下演示常見22種函數,注意省略和默認是區分大小寫:
?1、初始化
主要是兩種方式;
- 第一種:構造函數
QString str("Hello Qt");? 等同于? ?QString str="Hello Qt";
- 第二種:使用resize設置大大小逐個初始化元素
?注意:
?2、訪問某元素
主要四種方式:
?[ ] 和 data[ ] 為可讀可寫
at( )?和 constData[ ]僅為可讀 //如果只讀采用這種方式避免了深度復制更快;
QString line("Hello World");QChar ch=line.at(4);qInfo() << "line.at(4)="<<ch;輸出為? line.at(4)='o'
3、賦值運算
QString str=“QT”;
4、獲取長度
count()、size()和length()三個函數均可,但請注意漢字算1個字符長度;
5、大小寫轉換
toUpper 轉大寫
toLower 轉小寫
QString str1="Hello, World", str2; str2=str1.toUpper(); //str1="HELLO,WORLD" str2=str1.toLower(); //str1="hello, world"6、移除字符
remove()可移除一個或者多個字符
QString s = "Helloqt"; s.remove(1, 4); // s == "Hqt"7、添加字符串
append() 尾部追加
prepend() 前部追加
+和+=? ?也支持
QString line("Hello World");line+="QT";qInfo() << "line="<<line;//line= "Hello WorldQT"8、去掉空格
trimmed() //去掉首尾空格
simplified() //去掉首尾及中間 注意兩個連續空格會被替換為1個空格
QString str1=" Are you OK? ", str2;str2=str1.trimmed () ; //str1="Are you OK?"str2=str1.simplified(); //str1="AreyouOK?"9、查找字符串
indexOf( ) //常用,查找字符串出現位置?
find( ) //強大,支持正則
QString string( "bananas" );int i = string.find( QRegExp("an"), 0 ); // i == 1string.indexOf("a");//return 110、?判斷字符串為空
QString類對象只要賦值,就會在字符串末尾自動加上"\0"。判斷字符串為空,推薦isEmpty();
只有未賦值的字符串,isNull()才返回true;
QString str,str1=“”; bool N; N=str.isNull();//true N=str1.isNull();//false11、判斷是否包含
contains();
QString line("Hello World"); qInfo() << "Contains" << line.contains("world");//true12、判斷是否以字符串開頭或者結尾?
startsWith() //開頭
endsWith() //結尾?
Info() << "Starts" << line.startsWith("hello",Qt::CaseInsensitive);qInfo() << "Ends" << line.endsWith("world",Qt::CaseInsensitive);13、截取字符串
left()、right()和mid()三者均可截取;
三個函數并不會去修改QString類對象自身,而是返回-一個
臨時對象供調用者使用。
重點是 函數section() 也可以用來截取子字符串,截取功能更為強大,它的功能是從字符串中提取以sep作為分隔符、從start開始到end結束的子字符串。
QString str; QString data = "forename**middlename**surname**phone";str = data.section("**", 2, 2); // str == "surname" str = data.section("**", -3, -2); // str == "middlename**surname"14、格式化打印
QString::sprintf(),QString::arg()‘
int pos = 504;int max = 7439;QString status = QString("Processing file %1 of %2").arg(pos).arg(max);qInfo() << "status="<<status;//status= "Processing file 504 of 7439"15、將字符串類型轉換成其他基本數據類型
toInt()、toDouble()、toLong()等,這些都可以用一個bool指針作為參數,作為轉換狀態的返回。
bool ok;QString str="123";double d=str.toDouble(&ok);if(ok){qInfo() <<"succeed"<< d;}else{qInfo() << "failed"<<d;}返回值為 succed 123
16、?比較字符串
compare() 是基于Unicode非常快;
operator<()、operator<=()、operator==()、operator()、operator>=()和operator!=
以上六個也支持;
qInfo() << "Compare" << line.compare("hello world");17、清空
void clear()
18、截斷字符串
truncate()//去除指定位置后面所有字符串
chop()//刪除尾部最后幾個字符
19、char *和QString互轉
QString::fromAscii()、QString::fromUtf8()、QString(QLatin1String(c_str));
20、std::string和QString互轉?
1、std::string轉為QString 全英文
std::string s = "hello world";QString qs = QString::fromStdString(s);2、std::string轉為QString 中文
std::string s = "hello 中國";QString qs = QString::fromLocal8Bit(s.data());3、QString轉為std::string?全英文
QString qs = "coder";std::string s = qs.toStdString();4、QString轉為std::string 中文
QString qs = "中國 world";QByteArray cdata = qs.toLocal8Bit();std::string s = std::string(cdata);21. 數字和QString互轉
number()和setNum()轉字符串
QString str = QString::number(54.3);QString str1;str1.setNum(51.3);int d = 18;QString qs = QString::number(d);QString qs1 = "343";int d = qs1.toInt();22、Base64和Hex
qInfo() << "UTF8" << line.toUtf8();qInfo() << "Base64" << line.toUtf8().toBase64();qInfo() << "Hex" << line.toUtf8().toHex();字符類QChar 常見5種函數
QChar的編碼
QChar類是Qt中用于表示一個字符的類,實現在QtCore共享庫中。
在其內部維護了一個unsigned short類型的
QChar gemfield=0x6C49; //"漢"的Unicode編碼是0x6c49?1、構造函數
QChar() ;? ? ?//構造一個空字符,即'\0'
QChar (char ch) ; //由字符數據ch構造
QChar (uchar ch) ;/ 由無符號字符數據 ch構造
QChar (ushort code) ;//由無符號短整型數據code構造,code是Unicode編碼
QChar (short code) ;//由短整型數據code構造,code 是Unicode編碼
QChar (uint code) ;//由無符號整型數據code構造,code是Unicode編碼
QChar(int code) ;//由整型數據code構造,code是Unicode編碼
2、字符判斷函數
bool isDigit() const;//判斷是否是十進制數字('0' - '9')
bool isLetter() const;//判斷是否是字母
bool isNumber () const;//判斷是否是數字,包括正負號、小數點等
bool isLetterOrNumber () ;//判斷是否是字母或數字
bool isLower () const;//判斷是否是小寫字母
bool isUpper () const;//判斷是否是大寫字母
bool isNull () const;//判斷是否是空字符'\0'
bool isPrint () const;//判斷是否是可打印字符
bool ioSpacc() conot;//判斷是否是分隔符,包括空格等
3、數據轉換
char toAscii () const;//得到字符的ASCII碼
QChar toLower() const;//轉換成小寫字母
QChar toUpper() const ;//轉換成大寫字母
ushort unicode () const;//得到Unicodc編碼?
4、 比較運算符
<=? ? ? ? ?>=? ? ? ? ==? ? ? ? !=? ? ? ? <? ? ? ? >
5、QChar類與char類型的相互轉化
QChar轉char
char toLatin1();char toAscii();char轉QChar
QChar(char ch);QChar (uchar ch); 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的9-Qt6 QString和QChar的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8-Qt6 智能指针QPointer
- 下一篇: 10-Qt6 QStringView