并且通過(guò)函數(shù) set Water Cut Process Data(RS_Water Cut Process Data const &data)來(lái)設(shè)置水刀切割數(shù)據(jù),通過(guò)函數(shù) get Water Cut Process Data()來(lái)得到水切割數(shù)據(jù)。水刀切割工藝參數(shù)設(shè)計(jì)界面及用到的 Qt 組件如圖 3.20 所示。
QT 中序列化數(shù)據(jù)的類(lèi)是 QData Stream。對(duì)于非多態(tài)類(lèi),在自定義類(lèi)中聲明并實(shí)現(xiàn)輸入輸出操作符友元函數(shù),重載輸入輸出操作符即可實(shí)現(xiàn)數(shù)據(jù)序列化;對(duì)于多態(tài)類(lèi),除了聲明輸入輸出操作符友元函數(shù),還要聲明虛函數(shù) save()和 load(),在子類(lèi)中調(diào)用該函數(shù)來(lái)實(shí)現(xiàn)實(shí)際的輸入輸出,從而實(shí)現(xiàn)數(shù)據(jù)序列化。并且最主要的是一般父類(lèi)必須從 QObject 類(lèi)繼承,因?yàn)橐4骖?lèi)名字符串??墒菍?duì)于本文開(kāi)發(fā)的 CAD/CAM 一體化上位機(jī)軟件當(dāng)中,父類(lèi)并未從 QObject 類(lèi)中繼承,因此無(wú)法保存類(lèi)名字符串。為了解決這一問(wèn)題。特在父類(lèi)中定義 rtti()函數(shù)來(lái)獲取類(lèi)名字符串,從而具體的對(duì)子類(lèi)中的數(shù)據(jù)進(jìn)行保存。具體父類(lèi)中的重載輸出、輸入操作符實(shí)現(xiàn)過(guò)程及文件讀寫(xiě)過(guò)程在下面進(jìn)行具體介紹。
(1)重載<<函數(shù)
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)重載>>函數(shù)
QData Stream& operator >>(QData Stream &data Stream, RS_Flags **draw)
{
int n Entity Type;
data Stream >> n Entity Type;
//根據(jù)類(lèi)名字符串生成相應(yīng)類(lèi)的對(duì)象
switch(n Entity Type)
{
case RS2::Entity Line: //如果是實(shí)體是直線
*draw = (RS_Flags *)new RS_Line;
(*draw)->load(data Stream);
break;
……
}
return data Stream;
}