QVariant と ポインタ と Q_DECLARE_METATYPE の話
void * だお。でも今ヘルプをよーく見なおしたら、cchar * は大丈夫なのね。。。 QT @task_jp QVariant に入れられないって言ってたのって何のポインターでしたっけ? #qtjp
2011-08-03 06:29:05横槍で。。。Q_DECLARE_METATYPEしたら単純なクラス,構造体やポインタは何でもいけますですよ。 #qtjp RT @vivisuke: void * だお。でも今ヘルプをよーく見なおしたら、cchar * は大丈夫なのね。。。
2011-08-03 06:45:04アドバイスさんくす~。調べてみるお>Q_DECLARE_METATYPE QT @Atsushi4 Q_DECLARE_METATYPEしたら単純なクラス,構造体やポインタは何でもいけますですよ。 #qtjp
2011-08-03 06:49:58@vivisuke あ,qVariantFromValue(又はQVariant::fromValue)とqVariantValue(又はQVariant::value)は毎回必要だと思います。 #qtjp
2011-08-03 08:42:45さらにヘルプをよく見たら QVariant(cchar *) は文字列で、toCCharPtr() など無かった orz QT @task_jp void * だお。でも今ヘルプをよーく見なおしたら、cchar * は大丈夫なのね。 #qtjp
2011-08-03 09:01:50@Atsushi4 ヘルプには「MyStruct s; QVariant var; var.setValue(s);」とか「MyStruct s2 = var.value<MyStruct>();」とか書いてあるけど、これじゃダメなの? #qtjp
2011-08-03 09:03:31@vivisuke あ,それでOKです。説明が下手糞で申し訳ない。しかもsetValueは忘れてました。。。Q_DECLARE_METATYPEした型とQVariant間は変換関数が要る,と言いたかったです。 #qtjp
2011-08-03 09:08:05文字列でないchar*をQVariantで扱うならQByteArrayではいかがでしょう。 RT @vivisuke: さらにヘルプをよく見たら QVariant(cchar *) は文字列で、toCCharPtr() など無かった orz #qtjp
2011-08-03 09:18:21@vivisuke void*でしたねスミマセン。Q_DECLARE_METATYPE(void*)してQVariant var = qVariantFromValue<void*>(ptr); qDebug() << v.value<void*>();はいけました。 #qtjp
2011-08-03 09:25:55おーっそんな簡単なんだ。いと素晴らし。QT @Atsushi4 Q_DECLARE_METATYPE(void*)してQVariant var = qVariantFromValue<void*>(ptr); qDebug() << v.value<void*>(); #qtjp
2011-08-03 09:37:01そういえばQ_DECLARE_METATYPE(MyType)するならMyTypeを宣言してるヘッダの末尾がよさげだけどvoid*はどこでしたらいいんだろう。使うcppのincludeの下辺りに書いてみたけど。いや,そもそもvoid*は型安全じゃないかw #qtjp
2011-08-03 09:37:58Q_DECLARE_METATYPE(MyType)するならpublicなデフォルトコンストラクタ,コピーコンストラクタ,デストラクタが必要。でもQ_DECLARE_METATYPE(MyType*)してポインタで扱う方がスライシングの心配も無くて良い気がする。 #qtjp
2011-08-03 09:44:03C++ Coding Standardsでもポインタのコンテナを使用するべきだと書いてるし,QVariantもコピーのコストを考えるとクラスの場合はポインタを格納する方が効率が良さそうに思う。 #qtjp
2011-08-03 09:49:21なんてこったい。知ったかぶりでお恥ずかしい(;´Д`A RT @takumiasaki: @Atsushi4 @vivisuke void *はQMetaType::VoidStar としてMeta Typeにはデフォルトで登録済み #qtjp
2011-08-03 12:10:52@Atsushi4 @vivisuke void *はQMetaType::VoidStar としてMeta Typeにはデフォルトで登録済みです。Q_DECLARE_METATYPE()は要りません。 #qtjp
2011-08-03 11:19:18@takumiasaki @vivisuke なるほど。そのままQVariant v = qVariantFromValue<void*>(ptr);qDebug() << v.value<void*>();でいけました。ありがとうございます。#qtjp
2011-08-03 12:50:29家で書いた時にコンパイルエラーになったのはqVariantFromValueのtemplate引数void*を省略してたのかも。帰ったらもう一度確認してみよう。 #qtjp
2011-08-03 12:55:14