Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencipta Model Objek Generik untuk Digunakan dalam 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:
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!