QML 시퀀스 유형

모든 객체 유형값 유형에 대해 해당 유형의 여러 인스턴스를 저장할 수 있는 시퀀스 유형이 자동으로 제공됩니다. list 키워드를 사용하여 시퀀스 유형의 속성을 만들 수 있습니다:

import QtQml

QtObject {
    property list<int> ints: [1, 2, 3, 4]
    property list<Connection> connections: [
        Connection {
            // ...
        },
        Connection {
            // ...
        }
    ]
}

값 유형의 시퀀스는 QList 로 구현되고 객체 유형의 시퀀스는 QQmlListProperty 로 구현됩니다.

QML의 시퀀스는 일반적으로 자바스크립트 Array 유형처럼 동작하지만, 구현에 C++ 저장소 유형을 사용한다는 점에서 몇 가지 중요한 차이점이 있습니다:

  1. 시퀀스에서 요소를 삭제하면 undefined 값이 아닌 기본값으로 구성된 값이 해당 요소를 대체합니다.
  2. 시퀀스의 length 속성을 현재 값보다 큰 값으로 설정하면 undefined 요소가 아닌 기본으로 구성된 요소로 시퀀스가 지정된 길이로 채워집니다.
  3. Qt 컨테이너 클래스는 부호 없는 정수 인덱스가 아닌 부호 있는 정수 인덱스를 지원하므로 qsizetype 가 보유할 수 있는 최대 수보다 큰 인덱스에 액세스하려고 시도하면 실패합니다.

시퀀스에서 요소를 단순히 기본 구성 값으로 대체하지 않고 제거하려면 색인 삭제 연산자(delete sequence[i])를 사용하지 말고 splice 함수(sequence.splice(startIndex, deleteCount))를 사용하십시오.

일반적으로 QMetaSequence 에서 인식할 수 있는 모든 컨테이너는 Q_PROPERTY 또는 Q_INVOKABLE 메서드를 통해 C++에서 QML로 전달할 수 있습니다. 여기에는 Q_DECLARE_METATYPE 로 표시된 유형을 포함하는 등록된 모든 QList, QQueue, QStack, QSet, std::list, std::vector 가 포함되지만 이에 국한되지 않습니다.

QMetaSequence 을 통해 시퀀스를 사용하면 데이터 변환 비용이 많이 듭니다. 변환을 피하려면 C++에서 QML_SEQUENTIAL_CONTAINER 을 사용하여 자체 익명 시퀀스 유형을 등록할 수 있습니다. 이렇게 등록된 유형은 사전 정의된 시퀀스 유형처럼 동작하며 그대로 저장됩니다. 그러나 QML 이름은 없습니다.

경고: QList 또는 std::vector 같은 C++ 컨테이너로 저장된 시퀀스는 QML 값 유형 및 시퀀스 참조로 인한 영향을 받으므로 주의해서 처리해야 합니다. QQmlListProperty 는 기본 컨테이너에 대한 보기일 뿐이므로 영향을 받지 않습니다. std::vector 같은 C++ 표준 컨테이너는 암시적으로 공유되지 않습니다. 따라서 이를 복사하면 항상 심층 복사본이 생성됩니다. 속성에서 읽은 시퀀스는 항상 적어도 한 번은 복사해야 하므로 QML 시퀀스와 같은 컨테이너를 사용하면 QML에서 수정하지 않더라도 비용이 다소 많이 듭니다.

QtQml 모듈에는 몇 가지 sequence types 를 사용할 수 있습니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.