はじめに
Qt Advent Calendar 2016 17日の記事です。
初めてのAdvent Calendarで何を書こう?と思っていたのですが、
ちょうどQMLのお仕事でやった C++からQMLへデータを渡すコードを紹介します。
ソースコードは、ここに上げました。
結論
マクロ Q_GADGET
と Q_DECLARE_METATYPE
を使うことで、QMLからユーザ定義型を参照することができます。
やりたいこと
viewに関するデータをC++で受け取り、QMLで値を参照すること。
サンプルでは受け取り処理は省いています。
どうやって?
基本的に QMetaObject::invokeMethod を使って、QMLに定義した関数をCallすることができます。
この時に、マクロ Q_ARG
と QVariant型
を使うことで渡すことができます。
が... QVariant型は内包できる型が決まっています。 URL
Note that this only works for QObject subclasses which use the Q_OBJECT macro.
継承とマクロで解決できるそうですが、
マクロ Q_DECLARE_METATYPE
とQ_GADGET
を使うことで継承せず、スッキリと解決できます!
まとめ
マクロ Q_GADGET
と Q_DECLARE_METATYPE
を使うことで、QMLからユーザ定義型を参照することができます。
時間ギリギリ + 端折った記事になってすみません *<|:-)
明日は、Ohgochi さんです。Mobile楽しみですね。
参照