QVariant简介及星期和数值互转函数

环境:win10,vs2017,qt5.9.7。

QVariant类是常见的Qt数据类型的一个共用体(union),一个QVariant对象可以存储一个单一类型的单一的值(有些类型可能多值,如字符串列表)。可以使用toT()函数进行将QVariant 转换为一个T类型数据,并获取它的值。这里toT()会复制QVariant的值进行转换,所以原QVariant对象的值不变

我们Qt获取当前时间时,经常会需要将星期与对应的1-7数字进行转换,而Qt本身并没有提供这样的函数,所以我们自己写了一个函数。

QVariant CustomProtocol::DayOfWeek(QVariant weekday)
{
    if(weekday.type()==10)//(QMetaType::QString)
    {
        if((weekday==g_C2Q("星期一")) || (weekday=="Monday"))
            return 1;
        else if((weekday==g_C2Q("星期二") )|| (weekday=="Tuesday"))
            return 2;
        else if((weekday==g_C2Q("星期三"))||(weekday==" Wednesday"))
            return 3;
        else if((weekday==g_C2Q("星期四"))||(weekday=="Saturday"))
            return 4;
        else if((weekday==g_C2Q("星期五"))||(weekday=="Friday"))
            return 5;
        else if((weekday==g_C2Q("星期六"))||(weekday==" Saturday"))
            return 6;
        else if((weekday==g_C2Q("星期日"))||(weekday=="Sunday"))
            return 7;
        else
        {
            qDebug() << g_C2Q("Warning! input is QString ,but not like Monday-Sunday or 星期一-星期日");
            return -1;
        }

    }
    else if(weekday.type()==2 || weekday.type()==34 || weekday.type()==33||
            weekday.type()==3||weekday.type()==37 || weekday.type()==36)
    {//QMetaType::Int,QMetaType::UInt,QMetaType::Char,QMetaType::UChar,QMetaType::Short,QMetaType::UShort
        if(weekday==1)
            return g_C2Q("星期一");
        else if(weekday==2)
            return g_C2Q("星期二");
        else if(weekday==3)
            return g_C2Q("星期三");
        else if(weekday==4)
            return g_C2Q("星期四");
        else if(weekday==5)
            return g_C2Q("星期五");
        else if(weekday==6)
            return g_C2Q("星期六");
        else if(weekday==7)
            return g_C2Q("星期日");
        else
        {
            qDebug() << g_C2Q("Warning! input is data(int/uint/char/uchar/short/ushort) ,but not int 1-7");
            return -1;
        }
    }
    else
    {
        qDebug() << g_C2Q("Warning : weekday is not QString/int/uint/char/uchar/short/ushort !");
        return -1;
    }
}

函数DayOfWeek的输入和返回值均为QVariant类型,因为我们的输入输出可能是数字或字符串(QString),此处由于会报Warning,所以将weekday.type()的类型与数值对比了。原类型在代码后面注释表面了。

当输入星期(QString)时,且在星期一到星期日或者对应英文单词时会返回QVariant类型的一个1-7数值,可以使用toint()等函数转换,若是其他字符则提示并返回-1;

当输入数值(int/uint/char/uchar/short/ushort)时,且在1-7(包含1,7)时会返回QVariant类型的星期几,可以使用toString函数转换,若是其他字符则提示并返回-1;

当输入其他类型时,提示并返回-1。

所以应用时,我们可以对调用结果判断是否小于0,来判断是否调用成功,且可以根据打印信息查看错误提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值