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

目录
  • 介绍
  • 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类的资料请关注我们其它相关文章!

(0)

相关推荐

  • Qt QString的使用实现

    QString则使用隐式共享,又称回写复制.当两个对象共享同一份数据时,数据内容不改变,则不进行数据的复制,即将深拷贝和浅拷贝结合起来使用. QString使用时在连续的内存块上保存字符串,QString内存分配策略如下: 范围0~20:每次4个字符. 范围20~4084:每次2倍. 范围4084~∞:每次2048个字符. +:连接字符串 QString str1 = "I "; QString str2 = "LOVE "; QString str3 = &quo

  • Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转

    QString Qt的QString类提供了很方便的对字符串操作的接口,QString没有继承任何Qt基类. 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

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

    目录 介绍 QString常用函数 常用四则运算符 介绍 采用Unicode编码 采用隐式共享技术,节省内存和不必要的数据拷贝 隐式共享介于浅拷贝和深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象被修改了,则会实现深拷贝(从新开辟内存) 跨平台使用,不需要考虑不同平台的兼容性 QString直接支持字符串与数字的相互转换 QString直接支持字符串大小比较 QString直接支持不同字符编码间的相互转换 QString直接支持std::string和std:

  • IOS 开发之swift中手势的实例详解

    IOS 开发之swift中手势的实例详解 手势操作主要包括如下几类 手势 属性 说明 点击 UITapGestureRecognizer numberOfTapsRequired:点击的次数:numberOfTouchesRequired:点击时有手指数量 设置属性 numberOfTapsRequired 可以实现单击,或双击的效果 滑动 UISwipeGestureRecognizer direction:滑动方向 direction 滑动方向分为上Up.下Down.左Left.右Right

  • IOS 开发之PickerView自定义视图的实例详解

    IOS 开发之PickerView自定义视图的实例详解 例如选择国家,左边是名称右边是国家,不应该使用两列,而是自定义PickerView的一列,可以通过xib来实现. 注意,虽然PickerView也是一列,但是数据源方法是@required,所以必须实现. 因此,核心思想就是一列,自定义PickerView的行视图. 使用viewForRow方法可以设定行视图. 这样的视图可以通过xib和它的控制器进行封装: Xib的控制器继承自UIView类即可. 控制器维护一个用于设置数据的模型对象fl

  • QT中对Mat类的一些操作详解

    目录 一.类型转换 二.保存至数据库 一.类型转换 opencv在QT中的应用通常会涉及到这三者的转换,即Mat.QImage.QPixmap.下面分别给出了 Mat转QImage QImage转Mat Mat转QPixmap 1️⃣:Mat转QImage QImage MainWindow::MatToImage(const Mat &m) //Mat转Image { switch(m.type()) { case CV_8UC1: { QImage img((uchar *)m.data,m

  • Android开发之Android.mk模板的实例详解

    Android开发之Android.mk模板的实例详解 关于Android NDK开发的文章已经比较多了,我的博客中也分享了很多NDK开发相关经验和技巧,今天简单写了一个 Android.mk 的示例模板,供初学者参考. 本模板主要给大家示例 Android NDK 开发中的如下几个问题: 1. 如何自动添加需要编译的源文件列表   2. 如何添加第三方静态库.动态库的依赖   3. 如何构造一个完整的NDK工程框架 假设我们的项目依赖 libmath.a, libjson.a, libffmp

  • Android开发之TimePicker控件用法实例详解

    本文实例分析了Android开发之TimePicker控件用法.分享给大家供大家参考,具体如下: 新建项目: New Android Project-> Project name:HelloSpinner Build Target:Android 2.2 Application name:HelloSpinner Package name:com.b510 Create Activity:MainActivity Min SDK Version:9 Finish 运行效果: 如果: return

  • python GUI库图形界面开发之PyQt5拖放控件实例详解

    本篇,我们学习PyQt5界面中拖放(Drag 和Drop)控件. 拖放动作 在GUI中,拖放指的是点击一个对象,并将其拖动到另一个对象上的动作.比如百度云PC客户端支持的拖放文件以快速移动文件: 拖放动作能够很直观很方便的在GUI程序中完成一些很复杂或繁琐的操作. 在PyQt中实现拖放 在PyQt5中,我们也可以很轻松地使用拖放功能. 使用Qt设计师或者使用API都可以实现.我们先使用Qt设计师将GUI的图形设计出来,在之前的GUI的基础上,我们新建一个选项卡. 我们新建了一个选项卡,然后在里面

  • iOS开发之Quartz2D的介绍与使用详解

    一.前言 Quartz2D的API是纯C语言的,它是一个二维绘图引擎,同时支持iOS和Mac系统.Quartz2D的API来自于Core Graphics框架,数据类型和函数基本都以CG作为前缀.通常,我们可以使用系统提供的控件去完成大部分UI,但是有些UI界面极其复杂.而且比较个性化,用普通的UI控件无法实现,这时可以利用Quartz2D技术将控件内部的结构画出来,类似自定义控件.其实,iOS中大部分控件的内容都是通过Quartz2D画出来的,因此,Quartz2D在iOS开发中很重要的一个价

  • iOS开发之TableView实现完整的分割线详解

    前言 在我们创建一个tableView的时候,细心的你有没有发现UITableViewCell左侧会有空白.而我们在开发中有这样的需求: 需要一根完整的分割线(去掉烦人的空白部分, 即分割线的宽度 == 屏幕的宽度). 那么下面我就讲一讲该如何去掉空白的部分,显示完整的分割线. 这里我提供两种方法 : 第一种方法,也是我们最常用的方法,也是在我们自定义cell的时候所用到的. 即去掉tableView默认的分割线,自定义cell,重写setFrame: 方法即可 下面是具体代码实现: 步骤一 :

  • Python开发之pip安装及使用方法详解

    pip是什么 其实,pip就是 Python标准库(The Python Standard Library)中的一个包,这个包比较特殊,用它可以来管理Python标准库(The Python Standard Library)中其他的包.pip支持从PyPI(https://pypi.org/ ),版本控制,本地项目以及直接从分发文件进行安装.pip是一个命令行程序. 安装pip后,会向系统添加一个pip命令,该命令可以从命令提示符运行. 目前,pip 是The Python Packaging

随机推荐