QML で使用する汎用オブジェクト モデルを作成する方法
Qt モデルを QObject のプロパティとして登録するには、以下を利用できますQ_PROPERTY マクロ。ただし、すべてのモデル タイプがこのアプローチと互換性があるわけではありません。
AnimalModel の使用
QAbstractListModel を QML ビューに直接渡すのが一般的ですが、登録することはできません。 Q_PROPERTY を使用して QObject のプロパティとしてそれを作成します。
作成動的オブジェクト モデル
この制限を克服するには、任意のデータ型のモデルを保持するカスタム QObject を作成できます。次の例を考えてみましょう:
class DataObject : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged) ... AnimalModel m_modelAnimals; Q_PROPERTY(AnimalModel *modelAnimals READ modelAnimals NOTIFY modelAnimalsChanged) };
これは、AnimalModel へのポインターを返すプロパティを持つ QObject を作成します。その後、次のように QML でモデルにアクセスできます。
DataObject { modelAnimals: { // Manipulate the model here } }
スキーマレス モデル
さらに柔軟性が必要な場合は、スキーマレス モデルを作成できます。任意のプロパティを持つオブジェクトを許可します。これを実現するには:
リストの使用
こちらさまざまなオブジェクト タイプをサポートする汎用リスト モデルの例:
class List : public QAbstractListModel { Q_OBJECT QList<QObject *> _data; ... };
このモデルは次のように登録できます:
qmlRegisterType<List>("Core", 1, 0, "List");
そして次のように QML で使用できます:
List { QtObject { ... } QtObject { ... } List { QtObject { ... } QtObject { ... } } }
動的並べ替えとフィルタリング
へこのモデルをより使いやすくするには、並べ替えおよびフィルター処理のプロキシを実装できます。
class SortingFilteringProxy : public QAbstractListModel { Q_OBJECT QSortFilterProxyModel _proxy; ... };
これにより、含まれるオブジェクトの任意のプロパティに基づいて高度なフィルターおよび並べ替え機能が可能になります。
以上がQML で使用する汎用オブジェクト モデルを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。