首页 > 编程知识 正文

枚举类型是一种自定义的数据类型,c语言自定义数据类型

时间:2023-05-06 20:23:35 阅读:27795 作者:3448

此类型相当于Java中的Object,它封装大多数Qt提供的数据类型,并充当数据类型的“清除”。 例如,我们的table单元格可以是string、int或颜色值,那么这么多类型怎么返回呢? 因此,Qt提供了这种QVariant类型。 你只要收纳这些很多类型,使用一系列的to函数取出就可以了,直到需要使用的时候。 例如,将int包装在QVariant中,使用时用QVariant:toInt ()重新取出。 这里需要注意的是,必须支持QVariant类型的出入。 放入一个int就必须按int取出,不能使用toString ()。 Qt不会自动转换。

数据的核心不仅仅是union和标记类型的type。 在传递整数123后,union存储整数123,同时使用类型标记Int; 在传递字符串时,union存储指向字符串的指针,同时存储type标志QString。

QVariant是Qt的核心模块,是Qt的基础核心之一,ActiveQt、QtScript、QtDeclarative等很大程度上依赖于QVariant。

QVariant是许多QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、QPalette、QPen、QPixmap、QPoint和QRect item view classes、数据库模块和QSettings使用大量的QVariant类来方便数据的读写。

QVariant还允许嵌套存储,例如

QMapQString,QVariant pearMap; pear map [ '标准' ]=1.95; pearMap['Organic']=2.25; QMapQString,QVariant fruitMap; fruitMap['Orange']=2.10; fruitMap['Pineapple']=3.85; fruitMap['Pear']=pearMap; QVariant是Qt核心的一部分,因为它用于构建Qt元对象。 当然,也可以在GUI模块中使用。 例如

qiconicon(Open.png ); QVariant variant=icon; //otherfunction qiconicon=variant.value qicon (; 我们使用value (模板函数获取了存储在QVariant中的数据。 此函数也适用于非GUI数据,但非GUI模块通常使用一系列to . )函数,如toString (等toInt )。

如果您认为QVariant提供的存储数据类型太少,也可以自定义QVariant的存储类型。 存储在QVariant中的数据类型需要默认构造函数和复制构造函数。 要实现此功能,必须首先使用Q_DECLARE_METATYPE ()宏。 此宏通常位于包含类声明的头文件下。 q_declare_metatype(myclass )宏的位置:头文件,类声明后) :

要使用QVariant中可用的自定义类型,请在类声明后添加:Q_DECLARE_METATYPE ()、struct MyClass{QString name; int age; }q_declare_metatype(myclass )这样我们的类可以像QMetaType:Type类一样使用。 虽然有点不同,但是在使用方法上只能这样使用。 MyClass myClass; qvariantv3=qvairant :3360 from value (my class ); //v2.canConvertMyClass (; my class my class2=v2.value my class (; 例如:

q _ declare _ meta type (business card ) )。

然后我们可以做以下事情。

业务卡业务卡; qvariant variant=qvariant :3360 from value (业务卡); //if (variant.canconvertbusinesscard () ) businesscardcard=variant.valuebusinesscard ); //}由于VC6编译器的限制,这些模板函数不可用。 使用此编译器时,必须使用三个宏: qVariantFromValue (、qVariantValue )、qVariantCanConvert )。

如果自定义数据类型重写了和运算符,则可以直接在QDataStream中使用。 但是,必须首先使用qregistermetatypestreamoperators () .宏进行注册。 这样,QSettings就可以使用操作符处理数据。 例如,qregistermetatypestreamoperatorsbusinesscard (' business card );

QVariant与自定义数据类型转换的方法

1 % E3 % 80 % E5 % B0 % 86 % E8 % 87 % aa % E5 % ae9 % B9 % E6 % B0 % E6 % 8d % E7 % B1 % bb % E5 % 20 % B0 % E6 % 98 % ee 84 % E6 % 97 % B6 % E5 % 80 % ef % BC % 8c % E5 % a3 % E6 % 98 % 25 eq变量% E5 % af % B9 % E8 % bb8 % 20 % bb % E5 % 8a % aa A8 qvariant % E5 % af % B9 % E8 % B1 % a1 % E7 % 84 value % E6 % B9 % E6 % B3 % b5 % E8 % eer % 2058 www.Sina.com % t % 20 mystruct % 20 % 7b % 20 int % 20a % 3b % 20 char % 20b % 5b 10 % 5d % 3b % 20 % 7d % 3b % 20 mystruct % 20 stu % 3b % 200 % 200 b % 93 % E6 % 84 % 25 % 20 bobox % E7 % 9a % 84 data % E5 % 9f % E4 % b8 % ad % ef % BC % 9a % 20 bzero % 28 stu % 2c % 20 sizeof % 20f % 2f % E8 % b5 % 8b % E5 % 25 % 209 % 3b % 20 % 2f % E7 % B1 % E5 % 8b % E8 % BD % AC % E6 % a2 % 20q variant % 20v % % B6数据% E4 % b8 % ad % 20ui % 20 % 200 % 29 % 3b % 203.% E8 % af % bb % E5 % 8f % 96 % E7 % 9a % 84 % E6 % B6 % E5 % 80 % 9f % E5 % 8f % 96 % E5 % be % 97 vata % 20 % 2f % E8 % BD % AC % E6 % 8d % a2 % E4 % b8 % ba % E8 % 87 % aa % E5 % AE % E4 % B9

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。