环境: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,来判断是否调用成功,且可以根据打印信息查看错误提示。