派生クラスのリストを格納するプロパティを持つ可能性のあるいくつかのQObject
クラスがあります。QList
QObject
class Object : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<AnotherQObject*> otherObjects READ otherObjects)
public:
QList<AnotherQObject*> otherObjects() const;
}
QList<AnotherObject*>
はもちろん と に登録されていQ_DECLARE_METATYPE
ますqRegisterMetaType()
。
このプロパティを Qt のメタ オブジェクト システムで読み取りたいと思います。リストを読みたいと思った時点で、私はリストに から派生したオブジェクトへのポインターが含まれているという事実だけを気にします (そして知っています)QObject
が、正確な型ではありません。
QVariant
プロパティをリストに変換するQList<QObject *>
と空になります。
QObject *object = getObjectFromSomeWhere();
const char* propertyName = getPropertyNameFromSomeWhere(); // "otherObjects"
QVariant list = object->property(name);
QList<QObject *> objectList = list.value<QList<QObject *> >(); // empty
QList<AnotherQObject*> anotherObjectList =
static_cast<Object*>(object)->otherObjects() // not empty
このリストにアクセスできますか? 他の提案はありますか?
編集:私は自分の解決策を投稿しましたが、コメントが大好きです:-)