ホームページ > バックエンド開発 > C++ > QML で使用する汎用オブジェクト モデルを作成するには?

QML で使用する汎用オブジェクト モデルを作成するには?

Linda Hamilton
リリース: 2024-12-28 21:22:12
オリジナル
599 人が閲覧しました

How to Create a Generic Object Model for Use in QML?

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
    }
}
ログイン後にコピー

スキーマレス モデル

さらに柔軟性が必要な場合は、スキーマレス モデルを作成できます。任意のプロパティを持つオブジェクトを許可します。これを実現するには:

  1. QObject を格納する QAbstractListModel または QObject モデルを作成します。
  2. オブジェクトを返す単一のオブジェクト ロールを提供します。
  3. ローダーをデリゲートとして使用して、オブジェクトに基づいてさまざまな QML UI 実装をインスタンス化しますtype.
  4. モデルに QQmlListProperty と Q_CLASSINFO("DefaultProperty", "container") を実装して、QML の宣言構文を使用した動的合成を可能にします。

リストの使用

こちらさまざまなオブジェクト タイプをサポートする汎用リスト モデルの例:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート