六、QVariant类与常用算法及正则表达式

六、QVariant类与常用算法及正则表达式

6.1 QVariant类

QVariant类本质为c++联合(Union)数据类型,它可以保存很多Qt类型的值,包括QBrush、QColor、QString等等。也能够存放Qt的容器类型的值。

由于很多功能和前面的类相似,就不再赘述。

实例

#include<QVariant>
#include<QDebug>

struct student
{
    int no;
    QString name;
    int score;
};   
Q_DECLARE_METATYPE(student)

    QVariant v1=123;
    qDebug()<<v1.toInt();
    QVariant v2="string";
    qDebug()<<v2.toString();

    QMap<QString,QVariant> v3;
    v3["int"]=234;
    v3["double"]=1.1;
    v3["string"]="zhangsan";
    qDebug()<<v3;

    QStringList st;
    st<<"a"<<"b"<<"c"<<"d";

    QVariant v4=st;
    if(v4.type()==QVariant::StringList)
    {
        QStringList list=v4.toStringList();
        for(int i=0;i<list.size();i++)
        {
            qDebug()<<list.at(i);
        }
    }

    student stu;
    stu.no=1;
    stu.name="zhangsan";
    stu.score=100;

    QVariant v5=QVariant::fromValue(stu);
    if(v5.canConvert<student>())
    {
        student st1=v5.value<student>();
        student st2=qvariant_cast<student>(v5);

        qDebug()<<st1.no<<' '<<st1.name<<' '<<st1.score;
        qDebug()<<st2.no<<' '<<st2.name<<' '<<st2.score;

    }




//输出结果
123
"string"
QMap(("double", QVariant(double, 1.1))("int", QVariant(int, 234))("string", QVariant(QString, "zhangsan")))
"a"
"b"
"c"
"d"
1   "zhangsan"   100
1   "zhangsan"   100

Q_DECLARE_METATYPE(Type)

这个宏是为了让QMetaType知道Type这个数据类型,并提供一个默认的拷贝构造函数和析构函数。QVariant需要使用Q_DECLARE_METATYPE这个宏来定制类型。

QVariant::type()函数返回存储在QVariant变量中的值的数据类型。QVariant::StringList是Qt定义的一个QVariant::type枚举类型的变量。

同时QVariant还可以存储结构体。

QVariant::fromValue()函数用于将任何类型的值转换为QVariant类型。

canConvert()函数返回bool类型,返回QVariant进行两个类型之间的转换能力,重点是类型。

还有一个函数是convert(),是返回QVariant进行两个类型的数据之间转换的能力,重点是数据。

QVariant::value()与qvariant_cast<T>()

qvariant_cast<T>(const QVariant &value)
把value转化为T,这个函数等同于QVariant::value()

具体方法请看这位博主

6.2 常用算法

1. double qAbs(a):数qAbs()返回double类型数值a的绝对值

2. double qMax():函数qMax()返回两个数值中的最大值

3. int qRound(b):返回一个与浮点数最接近的整数值(四舍五入)

4. int qSwap(a,b):交换两数的值

以上算法就不一一实现了,相信大家都写过。

6.3 正则表达式

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间字母)和特殊字符(称为“元字符”)。正则表达式使用单个字符串来描述、匹配一系列匹配某个语法规则的字符串,通常被用来检索】替换那些符合某个模式的文本。正则表达式描述一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

正则表达式由表达式(expressions)、量词(quantifiers)、断言(assertions)组成

1. 最简单的表达式是一个字符。字符集可以使用表达式如"[AEIOU]",表示匹配所有的大写元音字母;使用"[^AEIOU]",表示匹配所有非元音字母,即辅音字母;连续的字符集可以使用表达式如"[a-z]",表示匹配所有的小写英文字母

2. 量词说明表达式出现的次数,如"x[1,2]"表示'x'可以至少有一个,至多有两个

正则表达式的量词
量词含义量词含义
E?匹配0次或1次E[n,]至少匹配n次
E+匹配1次或多次E[,m]最多匹配m次
E*匹配0次或多次E[n,m]至少匹配n次,最多匹配m次
E[n]匹配n次
正则表达式的断言
符号含义符号含义
^表示在字符串开头进行匹配\B非单词边界
$表示在字符串结尾进行匹配(?=E)表示表达式后紧随E才匹配
\b单词边界(?!E)表示表达式后不跟随E才匹配
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mo Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值