Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencipta Model Objek Generik untuk Digunakan dalam QML?

Bagaimana untuk Mencipta Model Objek Generik untuk Digunakan dalam QML?

Linda Hamilton
Linda Hamiltonasal
2024-12-28 21:22:12605semak imbas

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

Cara Membuat Model Objek Generik untuk Digunakan dalam QML

Untuk mendaftarkan model Qt sebagai harta QObject, anda boleh menggunakan makro Q_PROPERTY. Walau bagaimanapun, tidak semua jenis model serasi dengan pendekatan ini.

Menggunakan AnimalModel

Walaupun biasa untuk menghantar QAbstractListModel terus ke paparan QML, anda tidak boleh mendaftar. ia sebagai harta QObject menggunakan Q_PROPERTY.

Mencipta Model Objek Dinamik

Untuk mengatasi had ini, anda boleh mencipta QObject tersuai yang memegang model dari sebarang jenis data. Pertimbangkan contoh berikut:

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)
};

Ini mencipta QObject dengan sifat yang mengembalikan penunjuk kepada AnimalModel. Model itu kemudiannya boleh diakses dalam QML seperti ini:

DataObject {
    modelAnimals: {
        // Manipulate the model here
    }
}

Model Tanpa Skema

Jika anda inginkan lebih fleksibiliti, anda boleh mencipta model tanpa skema yang membenarkan objek dengan sifat sewenang-wenangnya. Untuk mencapai ini:

  1. Buat model QAbstractListModel atau QObject yang menyimpan QObject .
  2. Sediakan satu peranan objek yang mengembalikan objek.
  3. Gunakan Pemuat sebagai perwakilan untuk membuat seketika pelaksanaan UI QML yang berbeza berdasarkan objek taip.
  4. Laksanakan QQmlListProperty dan Q_CLASSINFO("DefaultProperty", "container") untuk model membenarkan komposisi dinamik menggunakan sintaks deklaratif QML.

Senarai Penggunaan

Berikut ialah contoh model Senarai generik yang menyokong pelbagai jenis objek:

class List : public QAbstractListModel
{
    Q_OBJECT
    QList<QObject *> _data;

    ...
};

Anda boleh mendaftar model ini menggunakan:

qmlRegisterType<List>("Core", 1, 0, "List");

Dan gunakannya dalam QML seperti berikut:

List {
    QtObject { ... }
    QtObject { ... }
    List {
        QtObject { ... }
        QtObject { ... }
    }
}

Pengisihan dan Penapisan Dinamik

Untuk menjadikan model ini lebih boleh digunakan, anda boleh melaksanakan pengisihan dan proksi penapisan:

class SortingFilteringProxy : public QAbstractListModel
{
    Q_OBJECT
    QSortFilterProxyModel _proxy;

    ...
};

Ini membenarkan keupayaan penapisan dan pengisihan lanjutan berdasarkan sifat arbitrari objek yang terkandung.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Model Objek Generik untuk Digunakan dalam QML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn