5.QT-QString類


Qt中的字符串類

介紹

  • 采用Unicode編碼 
  • 采用隱式共享技術,節省內存和不必要的數據拷貝
  • 隱式共享介於淺拷貝深拷貝之間,當兩個string對象賦值時,會實現淺拷貝(共享一塊內存),如果某個對象被修改了,則會實現深拷貝(從新開辟內存)
  • 跨平台使用,不需要考慮不同平台的兼容性
  • QString直接支持字符串與數字的相互轉換
  • QString直接支持字符串大小比較
  • QString直接支持不同字符編碼間的相互轉換
  • QString直接支持std::stringstd::wstring的相互轉換
  • QString直接支持正則表達式的應用

 

QString常用函數

 

static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };
QString str(data, 4);    //通過QChar寬字符初始化

str = "hello";     //直接賦值

str.length();    //獲取字符串長度

str.size();     //獲取字符串數量,等價於length()

str.capacity();   //獲取容量,容量包含了當前string里不必增加內存就能使用的字符數

str.isEmpty();      //如果str為空或為0 ,則返回true,否則返回false

str.isNull();    //如果為0,則返回true,否則返回false

str.clear();    //清空str

str. resize(8);    //設置str的字符串長度

str.fill('m');     //將str字符串,全部字符填為'm'

str.fill('m',5);    //填充5個字符'm',並修改str的字符串長度為5

       
str.append("ABC");   //在str字符串末尾附加"ABC"子串

str.prepend("abc");    //在str字符串頭部添加"abc"子串
 
str. chop(2);    //從str字符串末尾, 去掉2個字符

str = "Montreal";

str.remove(1, 4);    //從str下標1位置開始,清除4個字符, s = "Meal"

str.setNum(1234.5);    //數字轉字符串 str = "1234.5"

double val = str.toDouble();   //字符串轉double  val =1234.5
 

/*arg()成員函數:通過string串里通過“%數字”表示argument(參數) */
str = QString("%1,%2,%3,%4,%5,%6")
    .arg("A","B","C")
    .arg("D","E","D");     //字符串參數替換 str1 = "A,B,C,D,E,D"

str = QString("%1,%2")
         .arg(40)   
         .arg(40,0,16);        //將40以16進制轉換為字符串,如果想使用大寫的話,通過toUpper()函數來實現
                               //還可以這樣寫QString("%1").arg(cnt,5,10,QChar('0');  //輸出00050,表示保留5位有效數字,

floatcnt2=50.12345;
  qDebug()<<QString::asprintf("%.2f",cnt2);  //打印50.12
  

str.sprintf("%d %s",1,"first");    //通過一定參數輸出到字符串里, str= "1 first"

str="abcdef";

str.indexOf ("bc");      //return 1

str.indexOf ("bc",1);     //從str下標1的位置查找,return 1

str.indexOf ("bc",2);       //沒找到,則return -1

 
str. lastIndexOf("bc");    //反向查找,從str末尾向前查找,return 1
 
str. lastIndexOf("bc",5);    //反向查找,從str下標5的位置向前查找,return 1

str.lastIndexOf("bc",-2);    //反向查找,從str末尾-1的位置向前查找
str.insert( 2, "AB ");     //在str字符串下標2的位置插入"AB "子串 str="abcdefgh"; str2 = str.mid(3);   //提取子串,提取出str的下標為3到末尾,給str2 str2 = str.mid(3,4); //從str的下標為3開始,提取4個字符給str2 str = "th!ea minimum"; str.indexOf(QRegExp("[m i!]"), 0); // 使用正則表達式匹配查找,遇到m, ,i,! 時停止 ,所以return 2

long a = 63;
QString s = QString::number(a, 16);     // s == "3f"

QString t = QString::number(a, 16).toUpper(); // t == "3F"
 
 QString str = "Bananas";
 str.startsWith("Ban");           //判斷str的開頭是否以"Ban"開頭,returns true
 str.startsWith("Car");           // returns false

 

 常用四則運算符:

QString str="*+-";
str.indexOf(QRegExp("[+-]"));    //匹配一次+或-,所以return 1

str="*asd12345682";
str.indexOf(QRegExp("23"));      //匹配23成功,return 5

str="*abcsd8de";
str.indexOf(QRegExp("[0-9]"));      //匹配一次0~9數字,所以return 6 

 示例-通過四則運算匹配一個范圍的數字

比如:

12.5-19.5Kg    :提取出12.5 和19.5

125.68m~376.78m  :提取出125.68和376.78

999.99美元    :提取出999.99

代碼如下:

    QString text = ui->stringText->text();
    QString number1,number2;

    int begin1=text.indexOf(QRegExp("[0-9]"));
    text.remove(0,begin1);
    int begin2=text.indexOf(QRegExp("[^0-9.]"));  //找非0~9,小數點以外的字符位置
    if(begin1==-1)
    {
        qDebug()<<"err";
        return ;
    }

    if(begin2!=-1)          //比如 123XYZ
       number1 = text.left(begin2);
    else        //只有一個數字
    {
         number1 = text;
         qDebug()<<"range:"<<number1.toFloat();
         return ;
    }

    text.remove(0,begin2);
    begin1=text.indexOf(QRegExp("[0-9]"));
    text.remove(0,begin1);
    begin2=text.indexOf(QRegExp("[^0-9.]"));        //找非0~9,小數點以外的字符位置
    if(begin1==-1)  //只有一個數字
    {
        qDebug()<<"range:"<<number1.toFloat();
        return ;
    }

    if(begin2!=-1)          //比如 123XYZ
        number2 = text.left(begin2);
    else
        number2 = text;

    qDebug()<<"range:"<<number1.toFloat()<<"~"<<number2.toFloat();

打印如下:

 

 

 

 

 

 

 其它使用:

QByteArray QString::toLocal8Bit () ;
    //獲取字節數組對象
char * QByteArray::data ();        //通過字節數組對象的成員data函數,獲取char數組

 

 

 
        

 

  
QString("%1").arg(cnt,5,10,QChar('0'


免責聲明!

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



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