QML 시퀀스 유형

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

import QtQml

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

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

QML의 시퀀스는 일반적으로 JavaScript의 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 가 포함되어 있습니다.

© 2026 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.