Q_DECLARE_METATYPE,Qt自定義類型
這裏我們用下面的struct來說明(這裏struct和class都是壹樣的):
結構播放器
{
int數;
QString名字;
QString lastName
};
復制代碼
QVariant
為了在QVariant中使用定制數據類型,您需要使用Q_DECLARE_METATYPE()向Qt的元系統聲明這個定制類型。如下圖所示:
結構播放器
{
...
};
Q_DECLARE_METATYPE(播放器);
復制代碼
將自定義數據類型作為QVariant傳遞時,需要使用QVariant::fromValue()或qVariantFromValue:
玩家玩家;
對象-& gt;setProperty("property ",q variant::from value(player));
復制代碼
為了方便起見,您可以在自定義類型中定義壹個QVariant()類型轉換器:
結構播放器
{
...
運算符QVariant()常量
{
返回q variant::from value(* this);
}
};
復制代碼
所以我們可以這樣使用它:
玩家玩家;
對象-& gt;setProperty("property ",播放器);
復制代碼
信號和插槽
對於直連類型(默認為直連),使用自定義數據類型作為信號參數不需要其他處理,就像內置數據類型壹樣:
連接(發送者,信號(播放器)創建(常量播放器& amp))、接收器、插槽(add Player(const Player & amp;)));
復制代碼
但是如果妳在跨線程的時候再這樣做,編譯器會給出壹個警告:
QObject::connect:無法對“Player”類型的參數進行排隊
(確保使用qRegisterMetaType()註冊了“Player”。)