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