Qt开发之QString类的使用教程详解

 更新时间:2022年11月28日 09:13:12   作者:音视频开发老舅  
本文主要介绍了Qt中QString类的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

介绍

采用Unicode编码

采用隐式共享技术,节省内存和不必要的数据拷贝

隐式共享介于浅拷贝和深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象被修改了,则会实现深拷贝(从新开辟内存)

跨平台使用,不需要考虑不同平台的兼容性

QString直接支持字符串与数字的相互转换

QString直接支持字符串大小比较

QString直接支持不同字符编码间的相互转换

QString直接支持std::string和std::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')

以上就是Qt开发之QString类的使用教程详解的详细内容,更多关于Qt QString类的资料请关注脚本之家其它相关文章!

相关文章

  • C++ Opencv imfill孔洞填充函数的实现思路与代码

    C++ Opencv imfill孔洞填充函数的实现思路与代码

    在Matlab下,使用imfill可以很容易的完成孔洞填充操作,下面这篇文章主要给大家介绍了关于C++ Opencv imfill孔洞填充函数的实现思路与代码,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • C语言扫雷游戏的实现代码

    C语言扫雷游戏的实现代码

    这篇文章主要为大家详细介绍了C语言扫雷游戏实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言 自增自减运算的区别详解及实例

    C语言 自增自减运算的区别详解及实例

    这篇文章主要介绍了C语言中的++a和a++的区别详解及实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • 深入了解C语言栈的创建

    深入了解C语言栈的创建

    栈只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作,这篇文章主要介绍了C语言对栈的实现基本操作
    2021-07-07
  • 详解C++函数类型与重载函数

    详解C++函数类型与重载函数

    这篇文章主要为大家介绍了C++函数类型与重载函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • c++ vector(向量)使用方法详解(顺序访问vector的多种方式)

    c++ vector(向量)使用方法详解(顺序访问vector的多种方式)

    vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器,本文介绍一下使用方法
    2013-12-12
  • Objective-C 消息传递机制详解

    Objective-C 消息传递机制详解

    Objective-C语言中方法的传递有二种:①Selector ② Blocks,本文主要说一下Selector,本文以Objective-C 消息传递机制进行详细介绍,关于Blocks会在后续总结一下
    2012-11-11
  • 带你了解C++的动态内存分配

    带你了解C++的动态内存分配

    今天小编就为大家分享一篇关于关于C++动态分配内存的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • C语言实现关机小程序

    C语言实现关机小程序

    这篇文章主要为大家详细介绍了C语言实现关机小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • c++定义全局变量详解

    c++定义全局变量详解

    这篇文章主要给大家介绍了C++语言中定义全局变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2021-10-10

最新评论