Qt 모델을 QObjects의 속성으로 등록할 수 있습니까?
우선 Qt 모델이 실제로 QObjects의 속성으로 등록될 수 있다는 점을 분명히 하겠습니다. 매크로를 사용합니다. 예를 들어 여기에서 AnimalModel을 생각해 보세요.
http://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html#qabstractitemmodel
모델을 루트 컨텍스트에 전달
QuickView의 루트 컨텍스트에 모델을 전달하는 것은 간단한 방법입니다. 예는 다음과 같습니다.
QuickView view; view.rootContext()->setContextProperty("myModel", &model); // where "model" is the AnimalModel
마찬가지로 Qml 매크로를 통해 등록된 개체를 뷰에 추가할 수 있습니다.
view.rootContext()->setContextProperty("obj", pDataObject);
모델 속성이 있는 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이 아닌 AnimalModel *이 됩니다. 모델이 QAbstractListModel을 상속하는 한 NOTIFY 부분이 필요하지 않습니다. 모델 내의 변경 사항은 자동으로 반영됩니다.
유연한 모델 구현
보다 유연한 접근 방식은 QObject *를 저장하는 모델을 만드는 것입니다. QML에서는 다양한 속성을 가진 다양한 객체를 생성하고 이를 모델에 통합할 수 있습니다. 그런 다음 모델은 객체를 반환하는 단일 역할을 제공하므로 해당 속성을 쿼리하고 활용할 수 있습니다.
스키마 없는 모델
또한 QQmlListProperty 및 Q_CLASSINFO("DefaultProperty", "container")를 사용하여 "스키마 없는" 모델. 이를 통해 모델을 동적으로 구성하거나 QML의 선언적 구문을 사용할 수 있습니다. 중요한 점은 이 접근 방식이 객체를 선언적으로 추가하거나 제거하는 기능도 제공한다는 것입니다.
동적 데이터가 포함된 모델의 예
다음은 모든 것을 지원하는 모델 구현의 예입니다. 데이터 유형:
class List : public QAbstractListModel { Q_OBJECT QList<QObject *> _data; Q_PROPERTY(int size READ size NOTIFY sizeChanged) Q_PROPERTY(QQmlListProperty<QObject> content READ content) Q_PROPERTY(QObject * parent READ parent WRITE setParent) Q_CLASSINFO("DefaultProperty", "content") public: List(QObject *parent = 0) : QAbstractListModel(parent) { } // rest of the class ... };
이 모델은 다음을 포함하여 모든 QObject 또는 파생 클래스를 보유하는 데 사용할 수 있습니다. QML의 QtObject. 이는 ListView의 모델 역할을 할 수 있으며 슬롯이나 선언적 구문을 통해 동적 채우기를 지원합니다. 또한 객체 소유권을 처리하고 중첩되어 구획화된 트리 모델을 생성할 수 있습니다.
대리자용 로더
뷰에 다양한 객체 유형을 표시하기 위해 다음을 활용할 수 있습니다. 객체 유형에 따라 적절한 QML 파일을 로드하는 대리자용 로더.
일반 정렬 및 필터링 프록시
위 모델의 유용성을 높이기 위해 간단하고 동적인 일반 정렬 및 필터링 프록시를 구현할 수도 있습니다. 구현 요지의 예는 다음과 같습니다.
https://gist.github.com/gabor-boros/9e756b6dba5011c0286069feedbd3cc8
위 내용은 Qt 모델을 QObject의 속성으로 등록할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!