對於用戶定義的類型,有QVariant::userType()。它像QVariant :: type()一樣工作,但返回用戶定義類型的類型id整數,而QVariant :: type()總是返回QVariant :: UserType。
還有QVariant::typeName()它將類型的名稱作爲字符串返回。
編輯:
這可能取決於你如何設置QVariant。不鼓勵直接使用QVariant::QVariant(int type, const void * copy)。
說我有三種這樣的:
class MyFirstType
{
public:
MyFirstType();
MyFirstType(const MyFirstType &other);
~MyFirstType();
MyFirstType(const QString &content);
QString content() const;
private:
QString m_content;
};
Q_DECLARE_METATYPE(MyFirstType);
第三而不Q_DECLARE_METATYPE
我把它們存儲在的QVariant:
QString content = "Test";
MyFirstType first(content);
MySecondType second(content);
MyThirdType third(content);
QVariant firstVariant;
firstVariant.setValue(first);
QVariant secondVariant = QVariant::fromValue(second);
int myType = qRegisterMetaType<MyThirdType>("MyThirdType");
QVariant thirdVariant(myType, &third); // Here the type isn't checked against the data passed
qDebug() << "typeName for first :" << firstVariant.typeName();
qDebug() << "UserType :" << firstVariant.userType();
qDebug() << "Type : " << firstVariant.type();
[...]
我得到:
typeName for first : MyFirstType
UserType : 256
Type : QVariant::UserType
typeName for second : MySecondType
UserType : 257
Type : QVariant::UserType
typeName for third : MyThirdType
UserType : 258
Type : QVariant::UserType
然而,似乎是QVarian的情況t :: UserType變體,typeName()方法返回「UserType」,typeName()返回QVariant :: UserType枚舉值。所以兩者都沒用 – rasjani 2010-07-08 00:08:06
對象時間就好了,我可以用類型轉換來做檢查,所以你的例子也可以正常工作。但我的問題是關於枚舉的不是類的類型,而是可以將任何數字變量類型化爲枚舉。但是就像這樣說。我會檢查你的代碼。 – rasjani 2010-07-08 11:50:41
啊,對不起,我沒有注意到那一部分。我試過了,它看起來像使用Q_DECLARE_METATYPE或qRegisterMetaType註冊枚舉類型並以相同的方式使用它。該文檔只是談論與公共默認構造函數,複製構造函數和析構函數的類或結構,所以我不完全確定,但我認爲它應該適用於任何具有相同的創建,複製和銷燬的隱式接口的類型。 – Leiaz 2010-07-09 17:37:10