タイプqvariant :: usertypeのqvariantを検証する方法は、予想されるタイプですか?

StackOverflow https://stackoverflow.com/questions/3193275

  •  02-10-2019
  •  | 
  •  

質問

ウィジェットのすべてのQ_Propertyを自動的に繰り返すテストコードを作成しています。一部のプロパティは、QREGISTERMETATYPEを介して登録されているタイプを使用しています。これらをqvariantに読み取り/書きたい場合は、qvariant :: usertypeをバリエーションに保存するときに使用する必要があります。ここまでは順調ですね。

しかし、これらのプロパティの読み取りと書き込みをテストしたい場合は、それらのタイプも知る必要があります。既に標準のQTタイプであるものについては、QVariant :: Type()を介してこれを行うことができますが、多くのユーザータイプがあるので、これはどのように達成されますか?

QVariantのAPIから、これを見つけました。

bool QVariant::canConvert ( Type t ) const

しかし、これが酵素の場合にこれが間違ったタイプにつながるかどうかは少し疑わしいですか?

それでは、QVariantに保存されているタイプのUSERTYPEを確認するための絶対確実な方法は何でしょうか?

役に立ちましたか?

解決

ユーザー定義のタイプにはあります qvariant :: usertype(). 。 qvariant :: type()のように動作しますが、qvariant :: type()は常にqvariant :: usertypeを返しますが、ユーザー定義タイプのタイプID整数を返します。

もあります qvariant :: typename() タイプの名前を文字列として返します。

編集 :

おそらく、QVariantの設定方法に依存します。直接使用します qvariant :: qvariant(int type、const void * copy) 落胆しています。

私はこのような3つのタイプを持っているとします:

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なしの3番目

私はそれらを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 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top