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
Lepaskan: 2024-12-28 21:22:12
asal
623 orang telah melayarinya

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)
};
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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;

    ...
};
Salin selepas log masuk

Anda boleh mendaftar model ini menggunakan:

qmlRegisterType<List>("Core", 1, 0, "List");
Salin selepas log masuk

Dan gunakannya dalam QML seperti berikut:

List {
    QtObject { ... }
    QtObject { ... }
    List {
        QtObject { ... }
        QtObject { ... }
    }
}
Salin selepas log masuk

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;

    ...
};
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan