并且通过函数 set Water Cut Process Data(RS_Water Cut Process Data const &data)来设置水刀切割数据,通过函数 get Water Cut Process Data()来得到水切割数据。水刀切割工艺参数设计界面及用到的 Qt 组件如图 3.20 所示。
QT 中序列化数据的类是 QData Stream。对于非多态类,在自定义类中声明并实现输入输出操作符友元函数,重载输入输出操作符即可实现数据序列化;对于多态类,除了声明输入输出操作符友元函数,还要声明虚函数 save()和 load(),在子类中调用该函数来实现实际的输入输出,从而实现数据序列化。并且最主要的是一般父类必须从 QObject 类继承,因为要保存类名字符串。可是对于本文开发的 CAD/CAM 一体化上位机软件当中,父类并未从 QObject 类中继承,因此无法保存类名字符串。为了解决这一问题。特在父类中定义 rtti()函数来获取类名字符串,从而具体的对子类中的数据进行保存。具体父类中的重载输出、输入操作符实现过程及文件读写过程在下面进行具体介绍。
(1)重载<<函数
QData Stream& operator <<(QData Stream &data Stream, RS_Flags &draw)
{
int n=draw.rtti();
data Stream << n;
draw.save(data Stream);
return data Stream;
}
(2)重载>>函数
QData Stream& operator >>(QData Stream &data Stream, RS_Flags **draw)
{
int n Entity Type;
data Stream >> n Entity Type;
//根据类名字符串生成相应类的对象
switch(n Entity Type)
{
case RS2::Entity Line: //如果是实体是直线
*draw = (RS_Flags *)new RS_Line;
(*draw)->load(data Stream);
break;
……
}
return data Stream;
}