0

次のようなリストに MetaObjects を格納したいと思います。

myList = QList<QMetaObject>();
myList->append(MyClass::staticMetaObject);
myList->append(MyOtherClass::staticMetaObject);

アプリケーション全体でこれらのオブジェクトを追跡したいのですが、まだ割り当てたくありません。クラスに情報を追加することで、MetaObject 関数 "classInfo(int).value()" を使用できるようになります。QListWidget に保存するときにこれを使用します。QListWidget の行が押されたときに、リストに格納されている特定の種類のオブジェクトを作成できるようにしたいと考えています。(すべてのクラスが同じ基本クラスから派生していることも追加する必要があります)

このサンプル コードは、私がやりたいことの一部を説明していますが、彼の例では、作業を進めながらクラスを追加します。 http://lists.qt.nokia.com/pipermail/qt-interest/2012-January/037204.html

マニュアルを読んで、次のようなことを試してみると:

MyBaseClass *test = qobject_cast<MyBaseClass*>myList->at(i).newInstance();

プロジェクトはコンパイルされますが、「テスト」オブジェクトを印刷しようとするとnullになります。私は何を間違っていますか?そして、これはこれを行うための最良の方法ですか?

MetaType も見ていましたが、オブジェクトの作成が許可されていない場合、たとえばメニューの文字列などをどこに保存できますか? 文字列を返す静的関数がある場合、これはより良い解決策でしょうか?

編集:コンストラクターが Q_INVOKABLE になるように変更し、「test == null」の問題を解決しました。

しかし、このソリューションの欠点は何ですか? オブジェクト ファクトリを使用する必要がありますか (スイッチ ケースを使用した昔ながらの方法)。

4

0 に答える 0