[解決済み] QVariant::UserType 型の QVariant が期待された型であることを確認するにはどうすればよいですか?
質問
私は、ウィジェットのすべてのQ_PROPERTYを自動的に反復するテストコードを書いていて、いくつかのプロパティはqRegisterMetaTypeを介して登録されたタイプを使用しています。もし、これらをQVariantに読み書きしたい場合、それらをバリアントに保存するときにQVariant::UserTypeを使用する必要があります。ここまではいい感じです。
しかし、これらのプロパティの読み取りと書き込みをテストしたい場合、それらの型も知る必要があります。すでに標準的なqtの型であるものについては、私はQVariant::type()を介してこれを行うことができますが、私は多くのユーザー型を持っているので、これはどのように達成されるのでしょうか?
QVariantのapiから、こんなのを発見しました。
bool QVariant::canConvert ( Type t ) const
しかし、enumの場合、間違った型にならないか少し疑問です?
では、QVariantに格納されているusertypeの種類を確認する確実な方法は何でしょうか?
解決方法は?
ユーザー定義型には QVariant::userType() . QVariant::type() が常に QVariant::UserType を返すのに対して、これは QVariant::type() と同様に動作しますが、ユーザー定義型の型 ID を整数で返します。
また QVariant::typeName() これは型の名前を文字列で返します。
EDIT :
おそらく、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
関連
-
[解決済み] QDateTime::fromStringの使い方は?
-
[解決済み] QAbstractTableModelの内部にデータを設定する方法
-
[解決済み] Qml タイマーが正しい間隔で起動しない
-
[解決済み] qtnetwork4.dllという正しいファイルが見当たりません。
-
[解決済み] QMLイメージの表示サイズを調整する
-
Qt signal and slot usage error : error: no matching function for call to ...... Qt signal and slot usage error : error: no matching function for call to ...... Qt signal and slot usage error: error
-
不完全な型「クラスUi-Widge't」の無効な使用に対する解決策
-
CMakeラーニングサマリー
-
[解決済み】Qt-Designerでレイアウトが自動拡張される。
-
[解決済み] Qtプログラムを終了する正しい方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] QDateTime::fromStringの使い方は?
-
[解決済み] QAbstractTableModelの内部にデータを設定する方法
-
[解決済み] Qtのフォームレイアウト機構を理解する
-
[解決済み] qmake: ''の Qt インストールが見つかりませんでした。
-
[解決済み] QMLイメージの表示サイズを調整する
-
[解決済み] QTextEditの内容を表示するQTextBrowserを持つにはどうしたらよいですか?
-
Qt: (クラス名)::connect()への呼び出しに一致する関数がない エラー概要
-
CMakeラーニングサマリー
-
[解決済み】Qt-Designerでレイアウトが自動拡張される。
-
[解決済み】QLabel: テキストと背景の色を設定する