QT字串QString

checha發表於2024-07-16

QString

#include<QString>

  1. 追加字元
QString str1 = "hello ";
QString str2 = "world";
str1.append(str2);                   // str1 = "hello world"
str1.append(" !");                   // str1 = "hello world !"
// 對字串直接 + 另一個字串也可以實現,但是不對原本的字串進行操作
QString str3 = str1 + str2 + " !";   // str3 = "hello world !"   str1 = "hello "
  1. 從字串中查詢某個字串
QString x = "sticky question";
QString y = "sti";
int iPos = x.indexOf(y);              // 返回0
// 函式indexOf()會返回要查詢的字串在字串中第一次出現的位置
// 如果沒有要查詢的字串,返回-1

3.從字串中查詢某個字串最後出現的位置

QString strPath = ".C://Users/XXX/Desktop/111.txt";
int iPos = strPath.lastIndexOf(".");  // iPos值為26
// 函式indexOf()會返回要查詢的字串在字串中最後一次出現的位置
// 如果沒有要查詢的字串,返回-1
// 一般用於獲取一個檔案路徑後,判斷檔案的字尾名
  1. 用某個字元填滿字串
QString str = "Hello";
str.fill('x');             // str == "xxxxx"
str.fill('A', 2);          // str == "AA"
  1. 判斷字串是否為空
QString().isEmpty();            // 返回 true
QString("").isEmpty();          // 返回 true
QString(" ").isEmpty();         // 返回 false
QString("abc").isEmpty();       // 返回 false
  1. 判斷字串是否存在
QString().isNull();             // 返回 true
QString("").isNull();           // 返回 false
QString("abc").isNull();        // 返回 false
  1. 從左向右擷取字串
QString str = "Hello World !";
QString str1 = str.left(5);         // str1 = "Hello"
  1. 從中間擷取字串
QString str = "I love C++!";
QString str1 = str.mid(2, 4);       // str1 == "love"
QString str2 = str.mid(2);          // str2 == "love C++!"
  1. 擷取字串中最右邊幾個字元
QString str = "I love C++!";
QString str1 = str.right(4);        // str = I love C++! str1 = "C++!"
  1. 刪除字串中的最後幾個字元
QString str = "Hello World !";
str.chop(8);                        // str = "Hello"
  1. 刪除字串中間某個字元
QString str = "Hello World!";
str.remove(5, 6);                   // str = "Hello!"
  1. 指定位置插入字串
QString str = "Hello!";
str.insert(5, QString(" World"));   // str = "Hello World!"
  1. 用幾個字元替換字串中的幾個字元
QString x = "Say yes!";
QString y = "no";
x.replace(4, 3, y);                 // x = "Say no!"
x.replace("yes", "no");             // x = "Say no!"

14.字串補零到指定位

QString str = "A6";
//如果要把str補全到8位,空位用0補全
QString str1 = QString("%1").arg(str, 8, QLatin1Char('0'));    //str1 = "000000A6"
//arg裡第一個引數是要補全的字串,第二個引數是要補全到的位數,第三個引數是用什麼字元補全,可以不是0的其他字元

15.整型十進位制轉為十六進位制字串並補零到指定位

int n = 66;
//如果要把n轉換為十六進位制並補全到8位
QString str = QString("%1").arg(n, 8, 16, QLatin1Char('0'));   // str = "00000042"
//arg裡第一個引數是十進位制整型的數,第二個引數是要補全到的位數,第三個引數是要轉換的進位制,可以是十六進位制也可以是十進位制
//第四個引數是用什麼字元補全,可以不是0的其他字元
  1. 以某個字元切割字串
QString csv = "forename,middlename,surname,phone";
QString path = "/usr/local/bin/myapp";
//section()會把字串以第一個引數的符號切割分成數個字串,後面兩個引數是得到的字串的開始和結束的位置
QString str;
str = csv.section(',', 2, 2);       // str = "surname"
str = path.section('/', 3, 3);      // str = "bin"
str = path.section('/', 3, 4);      // str = "bin/myapp"
str = path.section('/', 3, 3, QString::SectionSkipEmpty);      // str = "myapp"
  1. 以某個字元切割字串另一種方法
QString str = "a,,b,c";
QStringList list1 = str.split(',');
// list1: [ "a", "", "b", "c" ]
QStringList list2 = str.split(',', QString::SkipEmptyParts);
// list2: [ "a", "b", "c" ]
  1. 檢查字串是否以某個字串開頭或結尾
QString str = "http://www.baidu.com";
str.startsWith("http:");            // 返回true
str.endsWith("cn");                 // 返回false
//這個方法比left()和right()要簡單快速,通常用來檢查路徑或者網址
  1. 比較兩個字串是否相等
QString str1 = "xxx";
QString str2 = "XXX";
//localeAwareCompare()會比較兩個引數的大小,如果str1小於str2,返回小於0的數,等於返回0,大於返回大於0的數
QString::localeAwareCompare(str1, str2)          // 返回 -1
//localeAwareCompare()的比較區分大小寫,想要不區分大小寫,可以使用toLower()或toUpper()使字串全變成小寫或大寫
if(QString::localeAwareCompare(str1.toUpper(), str2) == 0)
{
    qDebug() << "str1和str2相等";                // 返回0,輸出:str1和str2相等
}
  1. 去除字串兩側的空白字元(空白字元包括空格、Tab以及換行符,而不僅僅是空格)
QString str = " xxx ";
QString str1 = str.trimmed();

21.QString其他有用的用法

QString::arg()用法
 QString str = QString("%1 %2 %3").arg(1).arg(2.0).arg("hello");
%1, %2, %3作為佔位符,將被後面的arg()函式中的內容依次替換,比如%1將被替換成1,%2將被替換成2.0,%3將被替換成"hello"。輸出為:"1 2 hello"
QString::sprintf用法
QString
str.sprintf("%d %s", 10, "hello");

相關文章