QML에서 사용할 일반 객체 모델을 만드는 방법
Qt 모델을 QObject의 속성으로 등록하려면 다음을 활용할 수 있습니다. Q_PROPERTY 매크로. 그러나 모든 모델 유형이 이 접근 방식과 호환되는 것은 아닙니다.
AnimalModel 사용
QAbstractListModel을 QML 뷰에 직접 전달하는 것이 일반적이지만 등록하는 것은 불가능합니다. 이를 사용하여 QObject의 속성으로 Q_PROPERTY.
동적 객체 모델 생성
이 제한을 극복하기 위해 모든 데이터 유형의 모델을 보유하는 사용자 정의 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 } }
스키마 없는 모델
더 많은 유연성을 원한다면 스키마 없는 모델을 만들 수 있습니다. 임의의 속성을 가진 객체를 허용합니다. 이를 달성하려면:
목록 사용
다음은 예입니다. 다양한 개체 유형을 지원하는 일반 목록 모델:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!