QAbstractItemModel Class
QAbstractItemModel 클래스는 항목 모델 클래스를 위한 추상 인터페이스를 제공합니다. 더 보기...
| 헤더: | #include <QAbstractItemModel> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 상속: | QObject |
| 상속받는 유형: |
Public Types
| enum class | CheckIndexOption { NoOption, IndexIsValid, DoNotUseParent, ParentIsInvalid } |
| flags | CheckIndexOptions |
| enum | LayoutChangeHint { NoLayoutChangeHint, VerticalSortHint, HorizontalSortHint } |
공개 함수
| QAbstractItemModel(QObject *parent = nullptr) | |
| virtual | ~QAbstractItemModel() |
| virtual QModelIndex | buddy(const QModelIndex &index) const |
| virtual bool | canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const |
| virtual bool | canFetchMore(const QModelIndex &parent) const |
| bool | checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const |
(since 6.0) virtual bool | clearItemData(const QModelIndex &index) |
| virtual int | columnCount(const QModelIndex &parent = QModelIndex()) const = 0 |
| virtual QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0 |
| virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) |
| virtual void | fetchMore(const QModelIndex &parent) |
| virtual Qt::ItemFlags | flags(const QModelIndex &index) const |
| virtual bool | hasChildren(const QModelIndex &parent = QModelIndex()) const |
| bool | hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const |
| virtual QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const |
| virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0 |
| bool | insertColumn(int column, const QModelIndex &parent = QModelIndex()) |
| virtual bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) |
| bool | insertRow(int row, const QModelIndex &parent = QModelIndex()) |
| virtual bool | insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) |
| virtual QMap<int, QVariant> | itemData(const QModelIndex &index) const |
| virtual QModelIndexList | match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const |
| virtual QMimeData * | mimeData(const QModelIndexList &indexes) const |
| virtual QStringList | mimeTypes() const |
| bool | moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild) |
| virtual bool | moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild) |
| bool | moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild) |
| virtual bool | moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) |
(since 6.0) virtual void | multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const |
| virtual QModelIndex | parent(const QModelIndex &index) const = 0 |
| bool | removeColumn(int column, const QModelIndex &parent = QModelIndex()) |
| virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) |
| bool | removeRow(int row, const QModelIndex &parent = QModelIndex()) |
| virtual bool | removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) |
| virtual QHash<int, QByteArray> | roleNames() const |
| virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const = 0 |
| virtual bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) |
| virtual bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) |
| virtual bool | setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) |
| virtual QModelIndex | sibling(int row, int column, const QModelIndex &index) const |
| virtual void | sort(int column, Qt::SortOrder order = Qt::AscendingOrder) |
| virtual QSize | span(const QModelIndex &index) const |
| virtual Qt::DropActions | supportedDragActions() const |
| virtual Qt::DropActions | supportedDropActions() const |
공개 슬롯
신호
| void | columnsAboutToBeInserted(const QModelIndex &parent, int first, int last) |
| void | columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) |
| void | columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last) |
| void | columnsInserted(const QModelIndex &parent, int first, int last) |
| void | columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) |
| void | columnsRemoved(const QModelIndex &parent, int first, int last) |
| void | dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>()) |
| void | headerDataChanged(Qt::Orientation orientation, int first, int last) |
| void | layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint) |
| void | layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint) |
| void | modelAboutToBeReset() |
| void | modelReset() |
| void | rowsAboutToBeInserted(const QModelIndex &parent, int start, int end) |
| void | rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) |
| void | rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last) |
| void | rowsInserted(const QModelIndex &parent, int first, int last) |
| void | rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) |
| void | rowsRemoved(const QModelIndex &parent, int first, int last) |
보호된 함수
| void | beginInsertColumns(const QModelIndex &parent, int first, int last) |
| void | beginInsertRows(const QModelIndex &parent, int first, int last) |
| bool | beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
| bool | beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
| void | beginRemoveColumns(const QModelIndex &parent, int first, int last) |
| void | beginRemoveRows(const QModelIndex &parent, int first, int last) |
| void | beginResetModel() |
| void | changePersistentIndex(const QModelIndex &from, const QModelIndex &to) |
| void | changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to) |
| QModelIndex | createIndex(int row, int column, const void *ptr = nullptr) const |
| QModelIndex | createIndex(int row, int column, quintptr id) const |
| void | endInsertColumns() |
| void | endInsertRows() |
| void | endMoveColumns() |
| void | endMoveRows() |
| void | endRemoveColumns() |
| void | endRemoveRows() |
| void | endResetModel() |
| QModelIndexList | persistentIndexList() const |
보호된 슬롯
| virtual void | resetInternalData() |
정적 보호 멤버
(since 6.12) Qt::weak_ordering | compareData(const QVariant &left, const QVariant &right) |
(since 6.12) Qt::weak_ordering | compareData(const QVariant &left, const QVariant &right, const QCollator &collator) |
상세 설명
QAbstractItemModel 클래스는 모델/뷰 아키텍처 내에서 다른 컴포넌트와 상호 운용되기 위해 항목 모델이 반드시 사용해야 하는 표준 인터페이스를 정의합니다. 이 클래스는 직접 인스턴스화되어서는 안 됩니다. 대신, 이 클래스를 상속받아 새로운 모델을 생성해야 합니다.
QAbstractItemModel 클래스는 모델/뷰 클래스 중 하나이며, Qt의 모델/뷰 프레임워크의 일부입니다. 이 클래스는 QML의 항목 뷰 요소나 Qt Widgets 모듈의 항목 뷰 클래스에 대한 기본 데이터 모델로 사용될 수 있습니다.
QML의 List View 요소나 C++ 위젯인 QListView 또는 QTableView 과 같은 항목 뷰와 함께 사용할 모델이 필요한 경우, 이 클래스 대신 QAbstractListModel 또는 QAbstractTableModel 을 상속하는 것을 고려해야 합니다.
기본 데이터 모델은 뷰와 델리게이트에 테이블의 계층 구조로 노출됩니다. 이 계층 구조를 사용하지 않는 경우, 모델은 행과 열로 구성된 단순한 테이블이 됩니다. 각 항목에는 QModelIndex 로 지정된 고유한 인덱스가 있습니다.
모델을 통해 액세스할 수 있는 모든 데이터 항목에는 관련 모델 인덱스가 있습니다. 이 모델 인덱스는 index() 함수를 사용하여 얻을 수 있습니다. 각 인덱스에는 sibling() 인덱스가 있을 수 있으며, 자식 항목에는 parent() 인덱스가 있습니다.
각 항목에는 여러 데이터 요소가 연관되어 있으며, 모델의 data() 함수에 역할( Qt::ItemDataRole 참조)을 지정하여 이를 가져올 수 있습니다. itemData() 함수를 사용하면 사용 가능한 모든 역할에 대한 데이터를 동시에 얻을 수 있습니다.
각 역할에 대한 데이터는 특정 Qt::ItemDataRole 를 사용하여 설정됩니다. 개별 역할에 대한 데이터는 setData()를 통해 개별적으로 설정하거나, setItemData()를 사용하여 모든 역할에 대해 일괄적으로 설정할 수 있습니다.
flags()을 사용하여 항목을 쿼리하면( Qt::ItemFlag 참조) 해당 항목을 선택, 드래그하거나 다른 방식으로 조작할 수 있는지 확인할 수 있습니다.
항목에 하위 객체가 있는 경우, hasChildren()는 해당 인덱스에 대해 true 을 반환합니다.
이 모델은 계층 구조의 각 레벨에 대해 rowCount() 및 columnCount() 메서드를 가지고 있습니다. 행과 열은 insertRows(), insertColumns(), removeRows() 및 removeColumns()을 사용하여 삽입하거나 제거할 수 있습니다.
이 모델은 변경 사항을 알리기 위해 신호를 발생시킵니다. 예를 들어, 모델에서 제공하는 데이터 항목이 변경될 때마다 dataChanged()이 발생합니다. 모델이 제공하는 헤더가 변경되면 headerDataChanged() 신호가 발생합니다. 기본 데이터의 구조가 변경되면, 모델은 layoutChanged() 신호를 발생시켜 연결된 뷰에 새로운 구조를 반영하여 표시된 항목을 다시 표시해야 함을 알릴 수 있습니다.
모델을 통해 제공되는 항목은 match() 함수를 사용하여 특정 데이터를 검색할 수 있습니다.
모델을 정렬하려면 sort()을 사용할 수 있습니다.
서브클래스 생성
참고: 모델 서브클래스 생성에 대한몇 가지 일반적인 지침은 모델 서브클래스 참조에서 확인할 수 있습니다.
QAbstractItemModel을 서브클래싱할 때는 최소한 index(), parent(), rowCount(), columnCount() 및 data()을 구현해야 합니다. 이 함수들은 모든 읽기 전용 모델에서 사용되며, 편집 가능한 모델의 기초를 형성합니다.
또한 ` rowCount()`의 구현 비용이 많이 드는 모델에 대해 특수한 동작을 제공하려면 ` hasChildren()`를 재구현할 수도 있습니다. 이를 통해 모델은 뷰에서 요청하는 데이터의 양을 제한할 수 있으며, 모델 데이터의 지연 로딩을 구현하는 방법으로도 활용할 수 있습니다.
모델에서 편집 기능을 사용하려면 setData()을 구현해야 하며, ItemIsEditable 가 반환되도록 보장하기 위해 flags()를 재구현해야 합니다. 또한 headerData()와 setHeaderData()를 재구현하여 모델의 헤더가 표시되는 방식을 제어할 수도 있습니다.
setData() 및 setHeaderData() 함수를 재구현할 때는 각각 dataChanged() 및 headerDataChanged() 신호를 명시적으로 발산해야 합니다.
사용자 정의 모델은 다른 구성 요소가 사용할 수 있도록 모델 인덱스를 생성해야 합니다. 이를 위해, 항목에 적합한 행 및 열 번호와 포인터 또는 정수 값 형태의 식별자를 사용하여 createIndex()를 호출하십시오. 이러한 값들의 조합은 각 항목마다 고유해야 합니다. 사용자 정의 모델은 일반적으로 다른 재구현된 함수에서 이러한 고유 식별자를 사용하여 항목 데이터를 가져오고, 항목의 상위 및 하위 항목에 대한 정보에 접근합니다. 고유 식별자에 대한 자세한 내용은 간단한 트리 모델 예제를 참조하십시오.
Qt::ItemDataRole 에 정의된 모든 역할을 지원할 필요는 없습니다. 모델에 포함된 데이터의 유형에 따라, data() 함수를 구현하여 몇 가지 일반적인 역할에 대한 유효한 정보만 반환하는 것이 유용할 수 있습니다. 대부분의 모델은 Qt::DisplayRole 에 대한 항목 데이터의 텍스트 표현을 최소한 제공하며, 올바르게 작동하는 모델은 Qt::ToolTipRole 및 Qt::WhatsThisRole 에 대한 유효한 정보도 제공해야 합니다. 이러한 역할을 지원하면 모델을 표준 Qt 뷰와 함께 사용할 수 있습니다. 그러나 매우 특화된 데이터를 처리하는 일부 모델의 경우, 사용자 정의 역할에 대해서만 데이터를 제공하는 것이 적절할 수 있습니다.
크기 조정이 가능한 데이터 구조에 대한 인터페이스를 제공하는 모델은 insertRows(), removeRows(), insertColumns(), removeColumns()의 구현을 제공할 수 있습니다. 이러한 함수를 구현할 때는 모델의 크기가 변경되기 전과 후에 연결된 뷰에 변경 사항을 알리는 것이 중요합니다:
- insertRows()을 구현할 때는 데이터 구조에 새 행을 삽입하기 전에 beginInsertRows()을 호출해야 하며, 삽입이 완료된 직후에는 endInsertRows()을 호출해야 합니다.
- insertColumns()의 구현체는 데이터 구조에 새로운 열을 삽입하기 전에 beginInsertColumns()를 호출해야 하며, 삽입이 완료된 직후에는 endInsertColumns()를 호출해야 합니다.
- removeRows() 구현은 데이터 구조에서 행을 제거하기 전에 beginRemoveRows()를 호출해야 하며, 제거 직후에는 endRemoveRows()를 호출해야 합니다.
- removeColumns() 구현은 데이터 구조에서 열이 제거되기 전에 beginRemoveColumns()를 호출해야 하며, 제거 직후에는 endRemoveColumns()를 호출해야 합니다.
이 함수들이 방출하는 비공개 신호는 데이터가 더 이상 사용 불가능해지기 전에 연결된 구성 요소들이 조치를 취할 기회를 제공합니다. 삽입 및 제거 작업을 이러한 시작 및 종료 함수로 캡슐화함으로써 모델이 ` persistent model indexes `을 올바르게 관리할 수 있게 됩니다. 선택 항목을 올바르게 처리하려면 반드시 이 함수들을 호출해야 합니다. 자식을 가진 항목을 삽입하거나 제거하는 경우, 자식 항목에 대해서는 이러한 함수를 호출할 필요가 없습니다. 즉, 부모 항목이 자식 항목을 처리합니다.
점진적으로 데이터가 채워지는 모델을 만들려면 ` fetchMore()` 및 ` canFetchMore()`를 재구현할 수 있습니다. ` fetchMore()`의 재구현이 모델에 행을 추가하는 경우, ` beginInsertRows()` 및 ` endInsertRows()`를 호출해야 합니다.
스레드 안전성
QObject의 서브클래스인 QAbstractItemModel은 스레드 안전( thread-safe)하지 않습니다. QAbstractItemModel과 관련된 모든 모델 API는 모델 객체가 존재하는 스레드에서만 호출되어야 합니다. QAbstractItemModel이 뷰에 연결된 경우, 뷰가 GUI 스레드에 상주하며 해당 스레드에서 모델과 상호작용하므로, 모델도 GUI 스레드에서 작동합니다. 백그라운드 스레드를 사용하여 모델의 내용을 채우거나 수정할 수는 있지만, 모델 관련 API를 직접 호출할 수 없으므로 신중하게 처리해야 합니다. 대신, 업데이트 내용을 큐에 넣은 후 메인 스레드에서 적용해야 합니다. 이는 큐 기반 연결을 사용하여 수행할 수 있습니다.
또한 ‘모델 클래스’, ‘모델 서브클래스 참조’, QModelIndex, QAbstractItemView, QRangeModel, ‘아이템 뷰에서 드래그 앤 드롭 사용하기’, ‘간단한 트리 모델 예제’, ‘편집 가능한 트리 모델 예제’, ‘더 많은 데이터 가져오기 예제’를참조하십시오 .
멤버 유형 문서
enum class QAbstractItemModel::CheckIndexOption
flags QAbstractItemModel::CheckIndexOptions
이 열거형은 QAbstractItemModel::checkIndex() 함수가 수행하는 검사를 제어하는 데 사용할 수 있습니다.
| 상수 | 상수명 | 상수값 |
|---|---|---|
QAbstractItemModel::CheckIndexOption::NoOption | 0x0000 | 검증 옵션이 지정되지 않았습니다. |
QAbstractItemModel::CheckIndexOption::IndexIsValid | 0x0001 | QAbstractItemModel::checkIndex()에 전달된 모델 인덱스가 유효한 모델 인덱스인지 확인합니다. |
QAbstractItemModel::CheckIndexOption::DoNotUseParent | 0x0002 | QAbstractItemModel::checkIndex()에 전달된 인덱스의 상위 인덱스 사용과 관련된 어떠한 검사도 수행하지 않습니다. |
QAbstractItemModel::CheckIndexOption::ParentIsInvalid | 0x0004 | QAbstractItemModel::checkIndex()에 전달된 모델 인덱스의 상위 인덱스가 유효하지 않은 모델 인덱스인지 확인합니다. 이 옵션과 DoNotUseParent가 모두 지정된 경우, 이 옵션은 무시됩니다. |
CheckIndexOptions 유형은 QFlags<CheckIndexOption>에 대한 typedef입니다. 이 유형은 CheckIndexOption 값들의 OR 조합을 저장합니다.
enum QAbstractItemModel::LayoutChangeHint
이 열거형은 모델의 레이아웃이 변경되는 방식을 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QAbstractItemModel::NoLayoutChangeHint | 0 | 사용 가능한 힌트가 없습니다. |
QAbstractItemModel::VerticalSortHint | 1 | 행이 정렬되고 있습니다. |
QAbstractItemModel::HorizontalSortHint | 2 | 열이 정렬되고 있습니다. |
VerticalSortHint 및 HorizontalSortHint는 항목이 모델 내의 다른 부모로 이동되는 것이 아니라, 동일한 부모 내에서 이동되고 있으며, 필터링되어 제외되거나 포함되는 것이 아님을 의미합니다.
멤버 함수 설명서
[explicit] QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)
주어진 ` parent`을 사용하여 추상 항목 모델을 생성합니다.
[virtual noexcept] QAbstractItemModel::~QAbstractItemModel()
추상 아이템 모델을 삭제합니다.
[protected] void QAbstractItemModel::beginInsertColumns(const QModelIndex &parent, int first, int last)
컬럼 삽입 작업을 시작합니다.
하위 클래스에서 ` insertColumns()`를 재구현할 때는 모델의 기본 데이터 저장소에 데이터를 삽입하기 전에 이 함수를 호출해야 합니다.
parent 의 인덱스는 새 열이 삽입될 부모에 해당하며, first 및 last 는 삽입 후 새 열이 갖게 될 열 번호입니다.
| 모델의 항목에 삽입할 열 범위의 첫 번째 및 마지막 열 번호를 지정합니다. 예를 들어, 다이어그램에 표시된 대로 4번 열 앞에 세 개의 열을 삽입하므로, first 는 4이고 last 는 6입니다: 이렇게 하면 3개의 새 열이 4, 5, 6번 열로 삽입됩니다. | |
| 열을 추가하려면 마지막 열 뒤에 삽입합니다. 예를 들어, 다이어그램에 표시된 것처럼 기존 6개의 열(5번 열로 끝남) 모음에 3개의 열을 추가하면, first 의 값은 6이고 last 의 값은 8이 됩니다: 이렇게 하면 두 개의 새 열이 6, 7, 8번 열로 추가됩니다. |
참고: 이 함수는 columnsAboutToBeInserted() 신호를 발생시키며, 연결된 뷰(또는 프록시)는 데이터가 삽입되기 전에 이 신호를 처리해야 합니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.
endInsertColumns()도 참조하십시오 .
[protected] void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last)
행 삽입 작업을 시작합니다.
하위 클래스에서 ` insertRows()`를 재구현할 때는, 모델의 기본 데이터 저장소에 데이터를 삽입하기 전에 이 함수를 호출해야 합니다.
parent 인덱스는 새 행이 삽입될 상위 행을 나타내며, first 및 last 는 새 행이 삽입된 후 갖게 될 행 번호입니다.
| 모델의 항목에 삽입할 행 범위의 첫 번째 및 마지막 행 번호를 지정합니다. 예를 들어, 다이어그램에 표시된 것처럼 2번 행 앞에 세 개의 행을 삽입하므로, first 은 2이고 last 은 4가 됩니다: 이렇게 하면 3개의 새 행이 2, 3, 4번 행으로 삽입됩니다. | |
| 행 추가(append)를 하려면 마지막 행 뒤에 행을 삽입합니다. 예를 들어, 다이어그램에 표시된 것처럼 기존 4개의 행(3번째 행으로 끝남)으로 구성된 컬렉션에 두 개의 행을 추가하면, ` first `의 값은 4가 되고 ` last `의 값은 5가 됩니다: 이렇게 하면 두 개의 새 행이 4번 행과 5번 행으로 추가됩니다. |
참고: 이 함수는 데이터가 삽입되기 전에 연결된 뷰(또는 프록시)가 처리해야 하는 rowsAboutToBeInserted() 신호를 발생시킵니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.
endInsertRows()도 참조하십시오 .
[protected] bool QAbstractItemModel::beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
컬럼 이동 작업을 시작합니다.
서브클래스를 재구현할 때, 이 메서드는 모델 내 엔티티 이동을 간소화합니다. 이 메서드는 모델 내의 영속 인덱스를 이동하는 역할을 담당하며, 이 메서드가 없다면 개발자가 직접 수행해야 할 작업입니다. beginMoveColumns 및 endMoveColumns 을 사용하는 것은 layoutAboutToBeChanged 및 layoutChanged 을 changePersistentIndex 과 함께 직접 호출하는 대신 사용할 수 있는 대안입니다.
sourceParent 인덱스는 열이 이동되는 부모를 나타내며, sourceFirst 및 sourceLast 는 이동될 열의 첫 번째 및 마지막 열 번호를 나타냅니다. destinationParent 인덱스는 해당 열들이 이동될 부모를 나타냅니다. destinationChild 는 열들이 이동될 열을 나타냅니다. 즉, sourceParent 의 열 sourceFirst 에 있는 인덱스는 destinationParent 의 열 destinationChild 이 되며, 그 뒤를 이어 sourceLast 까지의 나머지 모든 열이 이동됩니다.
그러나 동일한 상위 요소 내에서 열을 아래로 이동할 경우(sourceParent 와 destinationParent 가 동일할 때), 해당 열들은 destinationChild 인덱스 앞에 배치됩니다. 즉, 열 0과 1을 이동하여 열 1과 2가 되도록 하려면, destinationChild 는 3이어야 합니다. 이 경우, 소스 열 i ( sourceFirst 와 sourceLast 사이에 위치)의 새 인덱스는 (destinationChild-sourceLast-1+i) 과 동일합니다.
sourceParent 와 destinationParent 가 동일한 경우, destinationChild 가 sourceFirst 와 sourceLast + 1 사이의 범위에 속하지 않도록 해야 합니다. 또한 열을 해당 열의 자식이나 조상 노드로 이동시키려 해서는 안 됩니다. 이 메서드는 두 조건 중 하나라도 참인 경우 false 를 반환하며, 이 경우 이동 작업을 중단해야 합니다.
endMoveColumns()도 참조하십시오 .
[protected] bool QAbstractItemModel::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
행 이동 작업을 시작합니다.
서브클래스를 재구현할 때, 이 메서드는 모델 내 엔티티 이동을 간소화합니다. 이 메서드는 모델 내의 영속 인덱스를 이동하는 역할을 담당하며, 이 메서드가 없다면 개발자가 직접 수행해야 할 작업입니다. beginMoveRows 및 endMoveRows 를 사용하는 것은 layoutAboutToBeChanged 및 layoutChanged 를 changePersistentIndex 와 함께 직접 호출하는 대신 사용할 수 있는 대안입니다.
sourceParent 인덱스는 행이 이동되는 부모 노드를 나타내며, sourceFirst 및 sourceLast 는 이동될 행의 첫 번째 및 마지막 행 번호입니다. destinationParent 인덱스는 해당 행들이 이동될 부모 노드를 나타냅니다. destinationChild 는 행들이 이동될 행을 나타냅니다. 즉, sourceParent 의 행 sourceFirst 에 해당하는 인덱스는 destinationParent 의 행 destinationChild 이 되며, 그 뒤를 이어 sourceLast 까지의 모든 행이 이동됩니다.
그러나 동일한 상위 노드 내에서 행을 아래로 이동할 경우(sourceParent 와 destinationParent 가 동일할 때), 해당 행들은 destinationChild 인덱스 앞에 배치됩니다. 즉, 행 0과 1을 이동하여 행 1과 2가 되도록 하려면, ` destinationChild `의 값은 3이어야 합니다. 이 경우, 소스 행 ` i `( sourceFirst 과 sourceLast 사이에 위치)의 새 인덱스는 ` (destinationChild-sourceLast-1+i)`과 같습니다.
sourceParent 와 destinationParent 가 동일한 경우, destinationChild 가 sourceFirst 와 sourceLast + 1 사이의 범위에 속하지 않도록 해야 합니다. 또한 행을 해당 행의 자식이나 조상 중 하나로 이동시키려 해서는 안 됩니다. 이 메서드는 두 조건 중 하나라도 참인 경우 false 를 반환하며, 이 경우 이동 작업을 중단해야 합니다.
| 모델 내에서 이동하려는 소스 부모 요소의 행 범위 중 첫 번째 및 마지막 행 번호를 지정합니다. 또한 해당 범위를 이동할 대상 부모 요소의 행 번호도 지정합니다. 예를 들어, 다이어그램에 표시된 대로 소스에서 2번 행부터 4번 행까지 세 행을 이동하므로, sourceFirst 는 2이고 sourceLast 는 4입니다. 해당 항목을 대상의 2번 행 위로 이동하므로, destinationChild 는 2입니다. 이렇게 하면 소스의 2, 3, 4번 행이 대상에서 각각 2, 3, 4번 행으로 이동하게 됩니다. 영향을 받는 다른 형제 행들도 그에 따라 재배치됩니다. | |
| 다른 부모 노드에 행을 추가하려면, 해당 행들을 마지막 행 뒤로 이동시킵니다. 예를 들어, 다이어그램에 표시된 것처럼 3개의 행을 기존 6개의 행(5번째 행으로 끝남)이 있는 컬렉션으로 이동시키면, ‘ destinationChild ’ 값은 6이 됩니다: 이렇게 하면 대상 행들이 대상 부모의 맨 끝으로 6, 7, 8번 행으로 이동합니다. | |
| 동일한 부모 내의 행을 이동하려면, 이동할 대상 행을 지정하십시오. 예를 들어, 다이어그램에 표시된 대로 2번 행에서 0번 행으로 항목을 하나 이동시키면, sourceFirst 와 sourceLast 는 2가 되고, destinationChild 는 0이 됩니다. 이 경우 다른 행들이 그에 따라 밀려날 수 있다는 점에 유의하십시오. 또한, 동일한 부모 요소 내에서 항목을 이동할 때는 유효하지 않거나 아무런 효과가 없는 이동을 시도해서는 안 된다는 점에도 유의하십시오. 위의 예시에서, 항목 2는 이동 전 행 2에 있으므로, 행 2(이미 있는 위치)나 행 3(행 3은 행 3 위를 의미하므로 이미 있는 위치이며, 이동 효과가 없음)으로 이동할 수 없습니다. | |
| 동일한 상위 요소 내에서 행을 이동하려면, 이동할 대상 행을 명시해야 합니다. 예를 들어, 다이어그램에 표시된 대로 한 항목을 2번째 행에서 4번째 행으로 이동시키려면, sourceFirst 와 sourceLast 의 값은 2로, destinationChild 의 값은 4로 지정해야 합니다. 이에 따라 다른 행들이 그에 따라 위치가 변경될 수 있음을 유의하십시오. |
endMoveRows()도 참조하십시오 .
[protected] void QAbstractItemModel::beginRemoveColumns(const QModelIndex &parent, int first, int last)
컬럼 제거 작업을 시작합니다.
하위 클래스에서 ` removeColumns()`를 재구현할 때는 모델의 기본 데이터 저장소에서 데이터를 제거하기 전에 이 함수를 호출해야 합니다.
parent 인덱스는 새 컬럼이 제거되는 부모에 해당하며, first 및 last 은 제거될 첫 번째 및 마지막 컬럼의 번호입니다.
| 모델의 항목에서 제거할 열 범위의 첫 번째 및 마지막 열 번호를 지정합니다. 예를 들어, 다이어그램에 표시된 대로 4번 열부터 6번 열까지의 세 개 열을 제거하므로, first 은 4이고 last 은 6입니다: |
참고: 이 함수는 columnsAboutToBeRemoved() 신호를 발생시키며, 연결된 뷰(또는 프록시)는 데이터가 제거되기 전에 이 신호를 처리해야 합니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.
endRemoveColumns()도 참조하십시오 .
[protected] void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last)
행 삭제 작업을 시작합니다.
하위 클래스에서 removeRows()을 재구현할 때는 모델의 기본 데이터 저장소에서 데이터를 제거하기 전에 이 함수를 호출해야 합니다.
parent 인덱스는 새 행이 제거되는 부모 행에 해당하며, first 및 last 는 제거할 행의 행 번호입니다.
| 모델의 항목에서 제거할 행 범위의 첫 번째 및 마지막 행 번호를 지정합니다. 예를 들어, 다이어그램에 표시된 대로 2번째 행부터 3번째 행까지 두 행을 제거하므로, first 은 2이고 last 은 3입니다: |
참고: 이 함수는 rowsAboutToBeRemoved() 신호를 발생시키며, 연결된 뷰(또는 프록시)는 데이터가 제거되기 전에 이 신호를 처리해야 합니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.
endRemoveRows()도 참조하십시오 .
[protected] void QAbstractItemModel::beginResetModel()
모델 재설정 작업을 시작합니다.
재설정 작업은 연결된 모든 뷰에서 모델을 현재 상태로 재설정합니다.
참고: 이 모델에 연결된모든 뷰도 함께 재설정됩니다.
모델이 재설정되면, 모델에서 이전에 보고된 모든 데이터는 이제 유효하지 않게 되며 다시 쿼리해야 합니다. 또한 현재 항목과 선택된 모든 항목도 유효하지 않게 됩니다.
모델의 데이터가 급격하게 변경될 때, 기본 데이터 소스나 그 구조가 변경되었음을 다른 컴포넌트에 알리기 위해 ` dataChanged()`를 호출하는 것보다 이 함수를 호출하는 것이 더 쉬운 경우가 있습니다.
모델이나 프록시 모델의 내부 데이터 구조를 재설정하기 전에 반드시 이 함수를 호출해야 합니다.
이 함수는 modelAboutToBeReset() 신호를 발생시킵니다.
modelAboutToBeReset(), modelReset(), endResetModel()도 참조하십시오 .
[virtual] QModelIndex QAbstractItemModel::buddy(const QModelIndex &index) const
index 로 표현되는 항목의 ‘버디’에 대한 모델 인덱스를 반환합니다. 사용자가 항목을 편집하려고 할 때, 뷰는 이 함수를 호출하여 모델 내의 다른 항목을 대신 편집해야 하는지 확인합니다. 그런 다음 뷰는 버디 항목이 반환한 모델 인덱스를 사용하여 델리게이트를 생성합니다.
이 함수의 기본 구현에서는 각 항목이 자체 버디로 설정되어 있습니다.
[virtual] bool QAbstractItemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
모델이 ` data`의 드롭을 허용할 수 있는 경우 ` true `을 반환합니다. 이 기본 구현은 ` data `에 ` mimeTypes()` 목록에 포함된 형식이 하나 이상 있는지, 그리고 ` action `가 모델의 ` supportedDropActions()`에 포함되어 있는지만 확인합니다.
data 가 row, column, parent 위치에 action 를 사용하여 드래그 앤 드롭될 수 있는지 테스트하려면 사용자 정의 모델에서 이 함수를 재구현하십시오. 해당 테스트가 필요하지 않다면 이 함수를 재구현할 필요는 없습니다.
dropMimeData() 및 항목 뷰에서 드래그 앤 드롭 사용하기항목도 참조하십시오.
[virtual invokable] bool QAbstractItemModel::canFetchMore(const QModelIndex &parent) const
parent 에 대해 더 많은 데이터가 있는 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
기본 구현은 항상 false 를 반환합니다.
canFetchMore()가 true 를 반환하면, fetchMore() 함수를 호출해야 합니다. 예를 들어, QAbstractItemView 의 동작이 바로 이와 같습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
fetchMore()도 참조하십시오 .
[protected] void QAbstractItemModel::changePersistentIndex(const QModelIndex &from, const QModelIndex &to)
지정된 from 모델 인덱스와 동일한 QPersistentModelIndex 을, 지정된 to 모델 인덱스로 변경합니다.
지정된 from 모델 인덱스와 동일한 영구 모델 인덱스가 발견되지 않으면, 아무런 변경도 이루어지지 않습니다.
persistentIndexList() 및 changePersistentIndexList()도 참조하십시오 .
[protected] void QAbstractItemModel::changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to)
지정된 from 모델 인덱스 목록에 있는 인덱스와 일치하는 {QPersistentModelIndex}es를, 지정된 to 모델 인덱스 목록으로 변경합니다.
주어진 from 모델 인덱스 목록의 인덱스와 일치하는 영구 모델 인덱스가 발견되지 않으면 아무런 변경도 이루어지지 않습니다.
persistentIndexList() 및 changePersistentIndex()도 참조하십시오 .
bool QAbstractItemModel::checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const
이 함수는 index 가 이 모델에 대해 유효한 모델 인덱스인지 확인합니다. 유효한 모델 인덱스란, 유효하지 않은 모델 인덱스이거나 다음 조건을 모두 충족하는 유효한 모델 인덱스를 말합니다:
- 해당 인덱스의 모델이
this인 경우; - 인덱스의 행 번호가 0 이상이어야 합니다;
- 인덱스의 행 번호가 해당 인덱스의 상위 인덱스의 행 수보다 작아야 하며;
- 인덱스의 열 수가 0 이상이어야 합니다;
- 인덱스의 열 수는 해당 인덱스의 상위 인덱스의 열 수보다 작아야 합니다.
options 인수는 이러한 검사 중 일부를 변경할 수 있습니다. options 에 IndexIsValid 가 포함되어 있다면, index 는 유효한 인덱스여야 합니다. 이는 유효한 인덱스를 기대하는 data()이나 setData()과 같은 함수를 재구현할 때 유용합니다.
options 에 DoNotUseParent 가 포함되어 있다면, parent()를 호출하게 될 검사들은 생략됩니다. 이를 통해 parent() 재구현에서 이 함수를 호출할 수 있습니다(그렇지 않으면 무한 재귀가 발생하여 프로그램이 중단될 것입니다).
options 에 DoNotUseParent 가 포함되어 있지 않고 ParentIsInvalid 가 포함되어 있는 경우, 부모 인덱스가 유효하지 않은지 확인하는 추가 검사가 수행됩니다. 이는 리스트나 테이블과 같은 평면 모델을 구현할 때 유용하며, 이러한 모델에서는 어떤 모델 인덱스도 유효한 부모 인덱스를 가져서는 안 됩니다.
이 함수는 모든 검사가 성공하면 true를, 그렇지 않으면 false를 반환합니다. 이를 통해 ` Q_ASSERT ` 및 이와 유사한 다른 디버깅 메커니즘에서 이 함수를 사용할 수 있습니다. 일부 검사가 실패하면 ` qt.core.qabstractitemmodel.checkindex ` 로깅 범주에 경고 메시지가 출력되며, 여기에는 실패 원인을 디버깅하는 데 유용할 수 있는 정보가 포함됩니다.
참고: 이 함수는 사용자 정의 아이템 모델을 구현하기 위한 디버깅 보조 도구입니다. 복잡한 모델을 개발하거나(예: 프록시 모델 사용) 복잡한 모델 계층 구조를 구축할 때, QAbstractItemModel API에 실수로 전달된 (위에서 정의한 바와 같은) 유효하지 않은 모델 인덱스와 관련된 버그를 포착하기 위해 이 함수를 호출하는 것이 유용합니다.
경고: 아이템 모델에 유효하지 않은 인덱스를 전달하는 것은 정의되지 않은 동작이므로 , 애플리케이션은 이를 피해야 하며, 아이템 모델이 유효하지 않은 인덱스를 우아하게 처리하기 위해 사용할 수 있는 어떤 “방어적” 프로그래밍 방식에도 의존해서는 안 됩니다.
QModelIndex도 참조하십시오 .
[virtual, since 6.0] bool QAbstractItemModel::clearItemData(const QModelIndex &index)
지정된 ` index`에 대한 모든 역할에 저장된 데이터를 제거합니다. 성공하면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. 데이터가 성공적으로 제거된 경우 ` dataChanged()` 신호를 발산해야 합니다. 기본 클래스 구현은 false
이 함수는 Qt 6.0에서 도입되었습니다.
data(), itemData(), setData(), setItemData()도 참조하십시오 .
[pure virtual invokable] int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
주어진 parent 의 자식 노드 수를 반환합니다.
대부분의 하위 클래스에서 열의 개수는 ` parent`와 무관합니다.
예:
int MyModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 3;
}참고: 테이블 기반 모델을 구현할때 , 부모가 유효한 경우 columnCount()는 0을 반환해야 합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
rowCount()도 참조하십시오 .
[private signal] void QAbstractItemModel::columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)
이 신호는 열이 모델에 삽입되기 직전에 발생합니다. 새로운 항목들은 주어진 parent 항목 아래, first 과 last (이 두 값 포함) 사이에 배치됩니다.
참고: 이 신호에 연결된컴포넌트는 모델의 치수 변화에 대응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 방출될 수 있으며, 서브클래스 코드에서는 명시적으로 방출할 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발산할 수는 없습니다.
insertColumns() 및 beginInsertColumns()도 참조하십시오 .
[private signal] void QAbstractItemModel::columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
이 신호는 모델 내에서 열이 이동되기 직전에 발신됩니다. 이동될 항목은 지정된 ` sourceParent ` 항목 아래에 있는 ` sourceStart `부터 ` sourceEnd `까지(해당 값 포함)의 항목들입니다. 이 항목들은 ` destinationColumn` 열을 시작으로 ` destinationParent `로 이동됩니다.
참고: 이 신호에 연결된 컴포넌트는 모델의 치수 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 방출할 수는 없습니다.
beginMoveRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
이 신호는 모델에서 열이 제거되기 직전에 발신됩니다. 제거 대상 항목은 지정된 parent 항목 아래에 있는, first 과 last 사이의 항목(양쪽 끝 포함)입니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발신될 수 있으며, 서브클래스 코드에서는 명시적으로 발신할 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만, 사용자가 직접 방출할 수는 없습니다.
removeColumns() 및 beginRemoveColumns()도 참조하십시오 .
[private signal] void QAbstractItemModel::columnsInserted(const QModelIndex &parent, int first, int last)
이 신호는 모델에 열이 삽입된 후에 발생합니다. 새로운 항목은 주어진 ` parent ` 항목 아래에서 ` first `부터 ` last `까지(양쪽 끝 포함)에 해당하는 항목들입니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 방출할 수는 없습니다.
insertColumns() 및 beginInsertColumns()도 참조하십시오 .
[private signal] void QAbstractItemModel::columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
이 신호는 모델 내에서 열이 이동된 후에 발신됩니다. 주어진 sourceParent 항목 아래에 있는 sourceStart 부터 sourceEnd 까지(이 두 항목 포함)의 항목들이 destinationColumn 열부터 시작하여 destinationParent 로 이동되었습니다.
참고: 이 신호에 연결된 컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 방출할 수는 없습니다.
beginMoveRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::columnsRemoved(const QModelIndex &parent, int first, int last)
이 신호는 모델에서 열이 제거된 후에 발신됩니다. 제거된 항목은 지정된 ` parent ` 항목 아래에서 ` first `부터 ` last `까지(이 두 값 포함)에 해당하는 열들입니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발산될 수 있으며, 서브클래스 코드에서는 명시적으로 발산할 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.
removeColumns() 및 beginRemoveColumns()도 참조하십시오 .
[static protected, since 6.12] Qt::weak_ordering QAbstractItemModel::compareData(const QVariant &left, const QVariant &right)
[static protected, since 6.12] Qt::weak_ordering QAbstractItemModel::compareData(const QVariant &left, const QVariant &right, const QCollator &collator)
left ( QVariant )와 right ( QVariant)를 비교하여, 정렬 순서를 weak ordering 로 반환합니다.
QVariant 가 문자열로 비교되는 경우, 선택적 collator 객체가 locale-aware 및 case-sensitive 비교에 사용됩니다. 콜레이터가 제공되지 않으면 문자열은 문자의 숫자 유니코드 값만을 기준으로 비교됩니다. 이 방법은 빠르지만, 사용자가 사용자 인터페이스에서 기대하는 결과와 종종 다를 수 있습니다.
이 함수는 ` QAbstractItemModel::sort()` 구현에 적합하며, 비교할 수 없는 변형 값(즉, ` QVariant::compare `가 ` unordered`를 반환하는 경우)에 대해서도 약한 순서를 제공합니다. 따라서 정렬 가능한 데이터가 필요한 ` std::sort ` 및 ` std::stable_sort`에서 안전하게 사용할 수 있습니다.
void Model::sort(int column, Qt::SortOrder sortOrder)
{
// Model operates on a QList<QVariant> data
std::sort(data.begin(), data.end(), [=](const QVariant &lhs, const Variant &rhs){
const auto ordering = compareData(lhs, rhs);
return sortOrder == Qt::AscendingOrder ? sortOrder < 0 : sortOrder > 0;
});
}left 인 QVariant 에 문자열이 포함된 경우, 선택적 collator 을 사용하여 변수들을 as strings 와 비교합니다.
그렇지 않은 경우, 구현체는 left 와 right 를 QVariant::compare()를 사용하여 비교하며, 이는 부분 정렬만 제공할 수 있습니다. 비교 결과 unordered 가 반환되고, left 와 right 의 meta type 가 동일하지 않은 경우, 함수는 변수들을 공통 유형으로 convert 하려고 시도한 후 비교를 다시 시도합니다.
이 과정에서도 여전히 unordered 결과가 발생하면, 두 변수의 문자열 표현을 비교합니다. 이 경우 두 개의 빈 문자열이 비교될 수 있으며, 이들은 {Qt::weak_ordering::}{equivalent}입니다.
Invalid variants 유효한 값을 가진 변수보다 항상 더 큰 것으로 비교됩니다.
이 함수들은 Qt 6.12에서 도입되었습니다.
또한 3자 비교, sort(), QVariant::compare 및 QSortFilterProxyModel 도참조하십시오 .
[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, const void *ptr = nullptr) const
지정된 row 및 column 에 대해 내부 포인터 ptr 를 사용하여 모델 인덱스를 생성합니다.
QSortFilterProxyModel 를 사용할 때, 해당 인덱스에는 고유한 내부 포인터가 있습니다. 모델 외부에서 이 내부 포인터에 접근하는 것은 권장되지 않습니다. 대신 data() 함수를 사용하십시오.
이 함수는 모델 하위 클래스가 모델 인덱스를 생성할 때 반드시 사용해야 하는 일관된 인터페이스를 제공합니다.
[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, quintptr id) const
지정된 ` row ` 및 ` column `에 대해 내부 식별자 ` id`을 사용하여 모델 인덱스를 생성합니다.
이 함수는 모델 하위 클래스가 모델 인덱스를 생성할 때 반드시 사용해야 하는 일관된 인터페이스를 제공합니다.
QModelIndex::internalId()도 참조하십시오 .
[pure virtual invokable] QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
role index 로 지정된 항목에 대해, 에 저장된 데이터를 반환합니다. 이 항목은 가 가리키는 항목입니다.
참고: 반환할 값이 없는경우 , 유효하지 않은 (기본 생성된) QVariant 를 반환하십시오.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
Qt::ItemDataRole, setData() 및 headerData()도 참조하십시오 .
[signal] void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())
이 신호는 기존 항목의 데이터가 변경될 때마다 발생합니다.
항목들이 동일한 부모를 가질 경우, 영향을 받는 항목은 topLeft 부터 bottomRight 까지(이 두 주소 포함)입니다. 항목들이 동일한 부모를 가지지 않을 경우, 동작은 정의되지 않습니다.
setData() 함수를 재구현할 때는 이 신호를 명시적으로 방출해야 합니다.
선택적 인자 ` roles `을 사용하여 실제로 수정된 데이터 역할이 무엇인지 지정할 수 있습니다. `roles` 인자에 빈 벡터가 전달되면 모든 역할이 수정된 것으로 간주됩니다. `roles` 인자 내 요소의 순서는 아무런 관련이 없습니다.
headerDataChanged(), setData(), layoutChanged()도 참조하십시오 .
[virtual] bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
지정된 action 으로 종료된 드래그 앤 드롭 작업에서 제공된 data 를 처리합니다.
데이터와 액션이 모델에 의해 처리된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
지정된 row, column 및 parent 는 작업이 종료된 모델 내 항목의 위치를 나타냅니다. 올바른 위치에서 작업을 완료하는 것은 모델의 책임입니다.
예를 들어, QTreeView 내의 항목에 대한 드롭 작업은 row, column 및 parent 로 지정된 항목의 자식 노드로 새 항목이 삽입되거나, 해당 항목의 형제 노드로 삽입되는 결과를 초래할 수 있습니다.
row 와 column 가 -1인 경우, 드롭된 데이터는 parent 에 직접 드롭된 것으로 간주되어야 함을 의미합니다. 일반적으로 이는 데이터를 parent 의 자식 항목으로 추가하는 것을 의미합니다. row 와 column 가 0 이상인 경우, 드롭이 지정된 parent 내에서 지정된 row 및 column 바로 앞에서 발생했음을 의미합니다.
mimeTypes() 멤버 함수는 허용되는 MIME 유형 목록을 가져오기 위해 호출됩니다. 이 기본 구현은 단일 기본 MIME 유형을 반환하는 mimeTypes()의 기본 구현을 가정합니다. 사용자 정의 모델에서 mimeTypes()을 재구현하여 여러 MIME 유형을 반환하는 경우, 해당 유형을 사용하려면 이 함수를 재구현해야 합니다.
supportedDropActions(), canDropMimeData() 및 항목 뷰에서 드래그 앤 드롭 사용을참조하십시오 .
[protected] void QAbstractItemModel::endInsertColumns()
컬럼 삽입 작업을 종료합니다.
하위 클래스에서 ` insertColumns()`를 재구현할 때는, 모델의 기본 데이터 저장소에 데이터를 삽입한 후 이 함수를 호출해야 합니다.
beginInsertColumns()도 참조하십시오 .
[protected] void QAbstractItemModel::endInsertRows()
행 삽입 작업을 종료합니다.
하위 클래스에서 ` insertRows()`를 재구현할 때는, 모델의 기본 데이터 저장소에 데이터를 삽입한 후 이 함수를 호출해야 합니다.
beginInsertRows()도 참조하십시오 .
[protected] void QAbstractItemModel::endMoveColumns()
열 이동 작업을 종료합니다.
서브클래스를 구현할 때는 모델의 기본 데이터 저장소 내에서 데이터를 이동한 후 이 함수를 호출해야 합니다.
beginMoveColumns()도 참조하십시오 .
[protected] void QAbstractItemModel::endMoveRows()
행 이동 작업을 종료합니다.
서브클래스를 구현할 때는 모델의 기본 데이터 저장소 내에서 데이터를 이동한 후 이 함수를 호출해야 합니다.
beginMoveRows()도 참조하십시오 .
[protected] void QAbstractItemModel::endRemoveColumns()
컬럼 제거 작업을 종료합니다.
서브클래스에서 ` removeColumns()`을 재구현할 때는 모델의 기본 데이터 저장소에서 데이터를 제거한 후 이 함수를 호출해야 합니다.
beginRemoveColumns()도 참조하십시오 .
[protected] void QAbstractItemModel::endRemoveRows()
행 삭제 작업을 종료합니다.
하위 클래스에서 ` removeRows()`를 재구현할 때는 모델의 기본 데이터 저장소에서 데이터를 제거한 후 이 함수를 호출해야 합니다.
beginRemoveRows()도 참조하십시오 .
[protected] void QAbstractItemModel::endResetModel()
모델 재설정 작업을 완료합니다.
모델이나 프록시 모델 내부의 데이터 구조를 재설정한 후에는 반드시 이 함수를 호출해야 합니다.
이 함수는 modelReset() 신호를 발생시킵니다.
beginResetModel()도 참조하십시오 .
[virtual invokable] void QAbstractItemModel::fetchMore(const QModelIndex &parent)
parent 인덱스로 지정된 부모 항목을 가진 항목들에 대해 사용 가능한 데이터를 모두 가져옵니다.
모델을 점진적으로 채우는 경우 이 메서드를 재구현하십시오.
기본 구현은 아무 작업도 수행하지 않습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하십시오.
canFetchMore()도 참조하십시오 .
[virtual invokable] Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const
지정된 index 에 대한 항목 플래그를 반환합니다.
기본 클래스 구현체는 항목(ItemIsEnabled)을 활성화하고 선택 가능하게(ItemIsSelectable) 만드는 플래그 조합을 반환합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
Qt::ItemFlags도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
parent 에 자식 노드가 있으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
자식 노드의 개수를 확인하려면 부모 노드에 대해 rowCount()을 호출하십시오.
동일한 인덱스에 Qt::ItemNeverHasChildren 플래그가 설정되어 있는 경우, 이 메서드를 사용하여 해당 인덱스가 hasChildren을 갖는다고 보고하는 것은 정의되지 않은 동작입니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
[invokable] bool QAbstractItemModel::hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const
모델이 parent 조건 하에서 row 및 column 에 대해 유효한 QModelIndex 를 반환하면 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
[virtual invokable] QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
지정된 orientation 를 사용하여 헤더 내의 주어진 role 및 section 에 대한 데이터를 반환합니다.
가로 방향 헤더의 경우, 섹션 번호는 열 번호와 일치합니다. 마찬가지로, 세로 방향 헤더의 경우, 섹션 번호는 행 번호와 일치합니다.
참고: 이 함수는 메타 객체 시스템 및 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하십시오.
Qt::ItemDataRole, setHeaderData() 및 QHeaderView도 참조하십시오 .
[signal] void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)
이 신호는 헤더가 변경될 때마다 발생합니다. ` orientation `는 가로 헤더가 변경되었는지, 세로 헤더가 변경되었는지를 나타냅니다. 헤더 내의 ` first `부터 ` last `까지의 섹션을 업데이트해야 합니다.
setHeaderData() 함수를 재구현할 때는 이 신호를 명시적으로 발생시켜야 합니다.
열이나 행의 수를 변경하는 경우에는 이 신호를 발생시킬 필요가 없으며, 대신 begin/end 함수를 사용해야 합니다(자세한 내용은 QAbstractItemModel 클래스 설명의 서브클래스 정의 섹션을 참조하십시오).
headerData(), setHeaderData() 및 dataChanged()도 참조하십시오 .
[pure virtual invokable] QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
주어진 row, column 및 parent 인덱스로 지정된 모델 내 항목의 인덱스를 반환합니다.
서브클래스에서 이 함수를 재구현할 때는 createIndex()를 호출하여, 다른 컴포넌트가 모델 내의 항목을 참조하는 데 사용할 수 있는 모델 인덱스를 생성해야 합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
createIndex()도 참조하십시오 .
[invokable] bool QAbstractItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())
지정된 column 보다 앞에, 지정된 parent 의 하위 항목 중 하나에 단일 열을 삽입합니다.
열이 삽입된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
insertColumns(), insertRow(), removeColumn()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
이 기능을 지원하는 모델의 경우, count 을 사용하여 지정된 column 보다 앞에 새로운 열을 모델에 삽입합니다. 각 새 열의 항목들은 parent 모델 인덱스가 나타내는 항목의 자식 항목이 됩니다.
column 가 0인 경우, 열들은 기존 열들 앞에 추가됩니다.
column 가 columnCount()인 경우, 열은 기존 열의 끝에 추가됩니다.
parent 에 자식이 없는 경우, count 개의 열을 가진 단일 행이 삽입됩니다.
컬럼이 성공적으로 삽입된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
기본 클래스의 구현은 아무 작업도 수행하지 않고 false 을 반환합니다.
사용자 정의 모델을 구현하는 경우, 삽입을 지원하려면 이 함수를 재구현할 수 있습니다. 또는 데이터를 변경하기 위한 자체 API를 제공할 수도 있습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하십시오.
insertRows(), removeColumns(), beginInsertColumns(), endInsertColumns()도 참조하십시오 .
[invokable] bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
지정된 ` row ` 앞에, 지정된 ` parent `의 하위 항목 중 하나에 행 하나를 삽입합니다.
참고: 이 함수는 가상 메서드 insertRows 를 호출합니다.
행이 삽입되면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
insertRows(), insertColumn(), removeRow()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
참고: 이 함수의 기본 클래스구현은 아무 작업도 수행하지 않고 ` false`를 반환합니다.
이를 지원하는 모델의 경우, 지정된 ` row` 앞에 ` count `개의 행을 삽입합니다. 새 행의 항목들은 ` parent ` 모델 인덱스로 표시되는 항목의 자식 항목이 됩니다.
row 가 0인 경우, 행들은 부모에 이미 존재하는 행들 앞에 삽입됩니다.
row 가 rowCount()인 경우, 행들은 부모의 기존 행들 끝에 추가됩니다.
parent 에 자식이 없는 경우, count 행이 포함된 단일 열이 삽입됩니다.
행이 성공적으로 삽입된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
사용자 정의 모델을 구현하는 경우, 삽입을 지원하려면 이 함수를 재구현할 수 있습니다. 또는 데이터를 변경하기 위한 자체 API를 제공할 수도 있습니다. 두 경우 모두, 모델이 변경되었음을 다른 컴포넌트에 알리기 위해 beginInsertRows() 및 endInsertRows()를 호출해야 합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
insertColumns(), removeRows(), beginInsertRows(), endInsertRows()도 참조하십시오 .
[virtual] QMap<int, QVariant> QAbstractItemModel::itemData(const QModelIndex &index) const
지정된 index 에 있는 항목에 대해 모델에 미리 정의된 모든 역할의 값을 포함하는 맵을 반환합니다.
이 함수의 기본 동작을 확장하여 맵에 사용자 정의 역할을 포함시키고자 하는 경우 이 함수를 재구현하십시오.
setItemData(), Qt::ItemDataRole 및 data()도 참조하십시오 .
[signal] void QAbstractItemModel::layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
이 신호는 모델의 레이아웃이 변경되기 직전에 발신됩니다. 이 신호에 연결된 컴포넌트는 이를 사용하여 모델 레이아웃의 변경 사항에 대응합니다.
서브클래스는 layoutAboutToBeChanged()를 발신 한 후, 모든 영구 모델 인덱스를 업데이트해야 합니다.
선택적 매개변수인 ` parents `는 모델 레이아웃의 어떤 부분이 변경되는지에 대한 보다 구체적인 알림을 제공하는 데 사용됩니다. 빈 리스트는 모델 전체 레이아웃의 변경을 나타냅니다. ` parents ` 리스트 내 요소의 순서는 중요하지 않습니다. 선택적 매개변수인 ` hint `는 모델의 레이아웃이 재구성되는 동안 어떤 일이 일어나고 있는지에 대한 힌트를 제공하는 데 사용됩니다.
layoutChanged() 및 changePersistentIndex()도 참조하십시오 .
[signal] void QAbstractItemModel::layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
이 신호는 모델이 노출하는 항목의 레이아웃이 변경될 때마다 발생합니다. 예를 들어, 모델이 정렬된 경우 등이 있습니다. 뷰가 이 신호를 수신하면, 해당 변경 사항을 반영하도록 항목의 레이아웃을 업데이트해야 합니다.
QAbstractItemModel 이나 QAbstractProxyModel 을 상속할 때는, 항목의 순서를 변경하거나 뷰에 노출하는 데이터의 구조를 수정하기 전에 layoutAboutToBeChanged()을 발산하고, 레이아웃을 변경한 후에는 layoutChanged()를 발산해야 합니다.
선택적 매개변수인 ` parents `는 모델 레이아웃의 어떤 부분이 변경되는지에 대한 보다 구체적인 알림을 제공하는 데 사용됩니다. 빈 리스트는 모델 전체 레이아웃의 변경을 나타냅니다. ` parents ` 리스트 내 요소의 순서는 중요하지 않습니다. 선택적 매개변수인 ` hint `는 모델이 레이아웃을 재구성하는 동안 어떤 일이 일어나고 있는지에 대한 힌트를 제공하는 데 사용됩니다.
서브클래스는 layoutChanged()를 발생시키기 전에 모든 영구 모델 인덱스를 업데이트해야 합니다. 즉, 구조가 변경될 때:
- emit layoutAboutToBeChanged
- 변경될 ` QModelIndex `를 기억하십시오
- 내부 데이터를 업데이트하십시오
- changePersistentIndex() 호출
- layoutChanged()를 발산
layoutAboutToBeChanged(), dataChanged(), headerDataChanged(), modelReset(), changePersistentIndex()도 참조하십시오 .
[virtual invokable] QModelIndexList QAbstractItemModel::match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
start 인덱스의 열에 포함된 항목 중, 지정된 role 하위에 저장된 데이터가 지정된 value 와 일치하는 항목의 인덱스 목록을 반환합니다. 검색 방식은 지정된 flags 에 의해 정의됩니다. 반환되는 목록은 비어 있을 수도 있습니다. 또한, 예를 들어 프록시 모델이 사용되는 경우, 목록 내 결과의 순서가 모델 내 순서와 일치하지 않을 수 있습니다. 결과의 순서는 신뢰할 수 없습니다.
검색은 start 인덱스에서 시작되며, 일치하는 데이터 항목의 수가 hits 에 도달하거나, 마지막 행에 도달하거나, start 에 다시 도달할 때까지 계속됩니다. 이는 flags 에 MatchWrap 가 지정되었는지 여부에 따라 달라집니다. 모든 일치 항목을 검색하려면 hits = -1을 사용하십시오.
기본적으로 이 함수는 모든 항목에 대해 줄 바꿈을 고려한 문자열 기반 비교를 수행하여, value 로 지정된 검색어로 시작하는 항목을 찾습니다.
참고: 이 함수의 기본구현은 열만 검색합니다. 다른 검색 동작을 포함하도록 이 함수를 재구현하십시오.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
[virtual] QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const
지정된 indexes 목록에 해당하는 직렬화된 데이터 항목을 포함하는 객체를 반환합니다. 인코딩된 데이터를 설명하는 데 사용되는 형식은 mimeTypes() 함수에서 가져옵니다. 이 기본 구현은 mimeTypes()의 기본 구현이 반환하는 기본 MIME 유형을 사용합니다. 사용자 정의 모델에서 mimeTypes()을 재구현하여 더 많은 MIME 유형을 반환하는 경우, 이 함수를 재구현하여 해당 유형들을 활용하십시오.
indexes 의 목록이 비어 있거나 지원되는 MIME 유형이 없는 경우, 직렬화된 빈 목록 대신 nullptr 가 반환됩니다.
mimeTypes() 및 dropMimeData()도 참조하십시오 .
[virtual] QStringList QAbstractItemModel::mimeTypes() const
허용되는 MIME 유형 목록을 반환합니다. 기본적으로 내장 모델과 뷰는 내부 MIME 유형인 application/x-qabstractitemmodeldatalist 을 사용합니다.
사용자 정의 모델에서 드래그 앤 드롭 기능을 구현할 때, 기본 내부 MIME 유형 이외의 형식으로 데이터를 반환할 경우, 이 함수를 재구현하여 해당 MIME 유형 목록을 반환해야 합니다.
사용자 정의 모델에서 이 함수를 재구현하는 경우, 이 함수를 호출하는 멤버 함수인 mimeData() 및 dropMimeData()도 함께 재구현해야 합니다.
mimeData() 및 dropMimeData()도 참조하십시오 .
[private signal] void QAbstractItemModel::modelAboutToBeReset()
이 신호는 beginResetModel()이 호출될 때, 모델의 내부 상태(예: 영구 모델 인덱스)가 무효화되기 전에 발생합니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.
beginResetModel() 및 modelReset()도 참조하십시오 .
[private signal] void QAbstractItemModel::modelReset()
이 신호는 모델의 내부 상태(예: 영구 모델 인덱스)가 무효화된 후 endResetModel()이 호출될 때 발생합니다.
모델이 재설정된 경우, 이전에 해당 모델에서 가져온 모든 정보는 무효화된 것으로 간주해야 합니다. 여기에는 rowCount() 및 columnCount(), flags(), data()을 통해 가져온 데이터, 그리고 roleNames() 등이 포함되지만 이에 국한되지는 않습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만, 사용자가 직접 발생시킬 수는 없습니다.
endResetModel() 및 modelAboutToBeReset()도 참조하십시오 .
[invokable] bool QAbstractItemModel::moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild)
이를 지원하는 모델의 경우, destinationParent 아래에서 sourceParent 에 있는 sourceColumn 를 destinationChild 로 이동합니다.
열이 성공적으로 이동된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
참고: 이 함수는 메타 객체 시스템 및 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
moveColumns() 및 moveRow()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild)
이를 지원하는 모델에서, 부모 노드 sourceParent 아래에 있는 count 열 중 지정된 sourceColumn 로 시작하는 열을 부모 노드 destinationParent 아래의 destinationChild 열로 이동합니다.
컬럼이 성공적으로 이동된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
기본 클래스의 구현은 아무 작업도 수행하지 않고 false 를 반환합니다.
사용자 정의 모델을 구현하는 경우, 이동을 지원하려면 이 함수를 재구현할 수 있습니다. 또는 데이터를 변경하기 위한 자체 API를 제공할 수도 있습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출될 수 있습니다. Q_INVOKABLE 를 참조하십시오.
beginMoveColumns() 및 endMoveColumns()도 참조하십시오 .
[invokable] bool QAbstractItemModel::moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild)
이를 지원하는 모델의 경우, destinationParent 하위의 sourceParent 에서 destinationChild 로 sourceRow 을 이동합니다.
행이 성공적으로 이동된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
moveRows() 및 moveColumn()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)
이를 지원하는 모델에서, 부모 노드 sourceParent 아래의 sourceRow 로 시작하는 count 행들을 부모 노드 destinationParent 아래의 destinationChild 행으로 이동시킵니다.
행이 성공적으로 이동된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
기본 클래스의 구현은 아무 작업도 수행하지 않고 false 를 반환합니다.
사용자 정의 모델을 구현하는 경우, 이동을 지원하려면 이 함수를 재구현할 수 있습니다. 또는 데이터를 변경하기 위한 자체 API를 제공할 수도 있습니다.
참고: 이 함수는 메타 객체 시스템 및 QML을 통해 호출될 수 있습니다. Q_INVOKABLE 를 참조하십시오.
beginMoveRows() 및 endMoveRows()도 참조하십시오 .
[virtual, since 6.0] void QAbstractItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
지정된 ` index`에 대해 요청된 데이터로 ` roleDataSpan `을 채웁니다.
기본 구현은 span 내의 각 역할에 대해 단순히 data()을 호출합니다. 하위 클래스는 이 함수를 재구현하여 뷰에 데이터를 더 효율적으로 제공할 수 있습니다:
void MyModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
for (QModelRoleData &roleData : roleDataSpan) {
int role = roleData.role();
// ... obtain the data for index and role ...
roleData.setData(result);
}
}위의 코드 조각에서 ` index `는 전체 호출에 걸쳐 동일합니다. 이는 ` index `에 대한 정보를 가져오기 위해 필요한 데이터 구조에 대한 접근을 단 한 번만 수행할 수 있음을 의미합니다(관련 코드를 루프 밖으로 추출함).
QModelRoleData::setData()이나 이와 유사한 QVariant::setValue()의 사용은 QVariant 를 별도로 생성하고 일반 할당 연산자를 사용하는 것보다 권장됩니다. 전자는 QModelRoleData 내에 저장된 QVariant 객체에 대해 이미 할당된 메모리를 재사용할 수 있게 하는 반면, 후자는 항상 새로운 변형을 할당하고 기존 변형을 파기하기 때문입니다.
뷰는 이전 호출에서 사용된 스팬(span)을 사용하여 multiData()를 호출할 수 있으며, 따라서 해당 스팬에 이미 일부 데이터가 포함되어 있을 수 있다는 점에 유의하십시오. 따라서 모델이 주어진 역할에 대한 데이터를 반환할 수 없는 경우, 해당 QModelRoleData 객체 내의 데이터를 반드시 지워야 합니다. 이는 ` QModelRoleData::clearData()`를 호출하거나, 마찬가지로 기본 생성된 ` QVariant`을 설정하는 등의 방법으로 수행할 수 있습니다. 데이터를 지우지 않으면 뷰는 해당 역할에 “이전” 데이터를 사용해야 한다고 오인하게 됩니다.
마지막으로, 코드 중복을 피하기 위해 하위 클래스는 multiData()를 기반으로 data()을 재구현하고, 단 하나의 요소로 구성된 스팬을 제공할 수도 있습니다:
QVariant MyModel::data(const QModelIndex &index, int role) const
{
QModelRoleData roleData(role);
multiData(index, roleData);
return roleData.data();
}참고: 모델은 스팬 내의 역할을 수정하거나 스팬 요소를 재배열할 수 없습니다. 이를 수행하면 정의되지 않은 동작이 발생합니다.
참고: 이 함수에 유효하지 않은 모델 인덱스를 전달하는것은 허용되지않습니다 .
이 함수는 Qt 6.0에서 도입되었습니다.
QModelRoleDataSpan 및 data()도 참조하십시오 .
[pure virtual invokable] QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const
지정된 ` index`을 가진 모델 항목의 부모를 반환합니다. 항목에 부모가 없는 경우, 유효하지 않은 ` QModelIndex `이 반환됩니다.
트리 데이터 구조를 노출하는 모델에서 흔히 사용되는 규칙은 첫 번째 열에 있는 항목만 자식을 가질 수 있다는 것입니다. 이 경우, 하위 클래스에서 이 함수를 재구현할 때 반환되는 QModelIndex 의 열은 0이 됩니다.
서브클래스에서 이 함수를 재구현할 때는 QModelIndex::parent()과 같은 QModelIndex 멤버 함수를 호출하지 않도록 주의해야 합니다. 해당 모델에 속한 인덱스는 단순히 여러분의 구현을 호출하게 되어 무한 재귀를 유발할 수 있기 때문입니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출될 수 있습니다. Q_INVOKABLE 를 참조하십시오.
createIndex()도 참조하십시오 .
[protected] QModelIndexList QAbstractItemModel::persistentIndexList() const
모델에 영구 인덱스로 저장된 인덱스 목록을 반환합니다.
[invokable] bool QAbstractItemModel::removeColumn(int column, const QModelIndex &parent = QModelIndex())
지정된 column 를 지정된 parent 의 하위 항목에서 제거합니다.
컬럼이 제거된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
removeColumns(), removeRow(), insertColumn()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
이를 지원하는 모델에서, 부모 parent 하위에 있는 column 으로 시작하는 count 열을 모델에서 제거합니다.
컬럼이 성공적으로 제거된 경우 ` true `을 반환하고, 그렇지 않은 경우 ` false`을 반환합니다.
기본 클래스 구현은 아무 작업도 수행하지 않고 false 를 반환합니다.
사용자 정의 모델을 구현하는 경우, 열 제거 기능을 지원하려면 이 함수를 재구현할 수 있습니다. 또는 데이터를 변경하기 위한 자체 API를 제공할 수도 있습니다.
참고: 이 함수는 메타 객체 시스템 및 QML을 통해 호출될 수 있습니다. Q_INVOKABLE 를 참조하십시오.
removeColumn(), removeRows(), insertColumns(), beginRemoveColumns() 및 endRemoveColumns()도 참조하십시오 .
[invokable] bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex())
지정된 row 를 parent 의 하위 항목에서 제거합니다.
행이 제거된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
이 함수는 ` removeRows()`을 호출하는 편의 함수입니다. ` QAbstractItemModel `에서 ` removeRows()`의 구현은 아무 작업도 수행하지 않습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하십시오.
removeRows(), removeColumn(), insertRow()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
이를 지원하는 모델에서, 부모 노드 parent 아래에 있는 row 로 시작하는 count 행들을 모델에서 제거합니다.
행이 성공적으로 제거된 경우 true 을 반환하고, 그렇지 않은 경우 false 를 반환합니다.
기본 클래스의 구현은 아무 작업도 수행하지 않고 false 을 반환합니다.
사용자 정의 모델을 구현하는 경우, 삭제를 지원하려면 이 함수를 재구현할 수 있습니다. 또는 데이터를 수정하기 위한 자체 API를 제공할 수도 있습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출될 수 있습니다. Q_INVOKABLE 를 참조하십시오.
removeRow(), removeColumns(), insertColumns(), beginRemoveRows() 및 endRemoveRows()도 참조하십시오 .
[virtual protected slot] void QAbstractItemModel::resetInternalData()
이 슬롯은 모델이 재설정되는 과정에서 모델의 내부 데이터가 지워진 직후 호출됩니다.
이 슬롯은 추가 데이터를 관리하는 ` QSortFilterProxyModel `의 하위 클래스와 같은 구체적인 프록시 모델의 하위 클래스들이 편리하게 사용할 수 있도록 제공됩니다.
class CustomDataProxy : public QSortFilterProxyModel
{
Q_OBJECT
public:
CustomDataProxy(QObject *parent)
: QSortFilterProxyModel(parent)
{
}
//...
QVariant data(const QModelIndex &index, int role) const override
{
if (role != Qt::BackgroundRole)
return QSortFilterProxyModel::data(index, role);
if (m_customData.contains(index.row()))
return m_customData.value(index.row());
return QSortFilterProxyModel::data(index, role);
}
private slots:
void resetInternalData()
{
m_customData.clear();
}
private:
QHash<int, QVariant> m_customData;
};참고: 실수로인해 Qt 5.0에서는 이 슬롯이 누락되어 있습니다.
modelAboutToBeReset() 및 modelReset()도 참조하십시오 .
[virtual slot] void QAbstractItemModel::revert()
모델에 캐시된 정보를 삭제해야 함을 알립니다. 이 함수는 주로 행 편집에 사용됩니다.
submit()도 참조하십시오 .
[virtual] QHash<int, QByteArray> QAbstractItemModel::roleNames() const
모델의 역할 이름을 반환합니다.
Qt에서 설정된 기본 역할 이름은 다음과 같습니다:
| Qt 역할 | QML 역할 이름 |
|---|---|
| Qt::DisplayRole | display |
| Qt::DecorationRole | decoration |
| Qt::EditRole | edit |
| Qt::ToolTipRole | 툴팁 |
| Qt::StatusTipRole | statusTip |
| Qt::WhatsThisRole | 이게 뭐지? |
[pure virtual invokable] int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
지정된 ` parent` 아래에 있는 행의 수를 반환합니다. 부모가 유효한 경우, `rowCount`는 부모의 자식 행 수를 반환함을 의미합니다.
참고: 테이블 기반 모델을 구현할때 , 부모가 유효한 경우 rowCount()는 0을 반환해야 합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
columnCount()도 참조하십시오 .
[private signal] void QAbstractItemModel::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
이 신호는 행이 모델에 삽입되기 직전에 발생합니다. 새로운 항목들은 주어진 parent 항목 아래, start 과 end (이 두 값 포함) 사이에 배치됩니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 대응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 방출할 수는 없습니다.
insertRows() 및 beginInsertRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
이 신호는 모델 내에서 행이 이동되기 직전에 발신됩니다. 이동될 항목은 주어진 sourceParent 항목 아래에 있는, sourceStart 부터 sourceEnd 까지(해당 주소 포함)의 항목들입니다. 이 항목들은 destinationRow 행부터 시작하여 destinationParent 로 이동됩니다.
참고: 이 신호에 연결된 컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발신될 수 있으며, 서브클래스 코드에서는 명시적으로 발신할 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 직접 방출할 수는 없습니다.
beginMoveRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
이 신호는 모델에서 행이 제거되기 직전에 발송됩니다. 제거될 항목은 주어진 parent 항목 아래에 있는, first 과 last 사이의 항목들(양쪽 끝 포함)입니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 방출할 수는 없습니다.
removeRows() 및 beginRemoveRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::rowsInserted(const QModelIndex &parent, int first, int last)
이 신호는 모델에 행이 삽입된 후에 발생합니다. 새로운 항목은 주어진 parent 항목 아래에 있는, first 부터 last 까지(이 두 값 포함)의 항목들입니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발산할 수는 없습니다.
insertRows() 및 beginInsertRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
이 신호는 모델 내에서 행이 이동된 후에 발송됩니다. 주어진 sourceParent 항목 아래에 있는 sourceStart 부터 sourceEnd 까지(이 두 항목 포함)의 항목들이 destinationRow 행부터 시작하여 destinationParent 로 이동되었습니다.
참고: 이 신호에 연결된 컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발산될 수 있으며, 서브클래스 코드에서는 명시적으로 발산할 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만, 사용자가 직접 발산할 수는 없습니다.
beginMoveRows()도 참조하십시오 .
[private signal] void QAbstractItemModel::rowsRemoved(const QModelIndex &parent, int first, int last)
이 신호는 모델에서 행이 제거된 후에 발생합니다. 제거된 항목은 주어진 parent 항목 아래에 있는, first 부터 last 까지(이 두 값 포함)의 행들입니다.
참고: 이 신호에 연결된컴포넌트는 모델의 차원 변화에 적응하기 위해 이 신호를 사용합니다. 이 신호는 QAbstractItemModel 구현체에서만 발생시킬 수 있으며, 서브클래스 코드에서는 명시적으로 발생시킬 수 없습니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만 사용자가 직접 발신할 수는 없습니다.
removeRows() 및 beginRemoveRows()도 참조하십시오 .
[virtual invokable] bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
index 에 있는 항목의 role 데이터를 value 로 설정합니다.
성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.
데이터가 성공적으로 설정된 경우 dataChanged() 신호를 발생시켜야 합니다.
기본 클래스 구현은 false 를 반환합니다. 편집 가능한 모델의 경우 이 함수와 data()을 재구현해야 합니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출될 수 있습니다. Q_INVOKABLE 를 참조하십시오.
Qt::ItemDataRole, data() 및 itemData()도 참조하십시오 .
[virtual] bool QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
지정된 orientation 를 사용하여 헤더 내의 role 및 section 에 대한 데이터를, 제공된 value 로 설정합니다.
헤더의 데이터가 업데이트된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
이 함수를 재구현할 때는 headerDataChanged() 신호를 명시적으로 발생시켜야 합니다.
Qt::ItemDataRole 및 headerData()도 참조하십시오 .
[virtual] bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
모든 Qt::ItemDataRole 에 대해, index 에 있는 항목의 역할 데이터를 roles 에 있는 관련 값으로 설정합니다.
성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.
roles 에 없는 역할은 수정되지 않습니다.
setData(), data(), itemData()도 참조하십시오 .
[virtual invokable] QModelIndex QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const
index 에 있는 항목에 대해 row 및 column 에 위치한 형제 노드를 반환하며, 해당 위치에 형제 노드가 없는 경우 유효하지 않은 QModelIndex 을 반환합니다.
sibling()은 항목의 부모를 찾아, 이를 사용하여 지정된 row 및 column 위치에서 자식 항목의 인덱스를 가져오는 편의 함수일 뿐입니다.
이 메서드는 구현별 최적화를 위해 선택적으로 재정의할 수 있습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하십시오.
index(), QModelIndex::row(), QModelIndex::column()도 참조하십시오 .
[virtual invokable] void QAbstractItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
지정된 order 내에서 column 기준으로 모델을 정렬합니다.
기본 클래스의 구현은 아무 작업도 수행하지 않습니다.
참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.
[virtual] QSize QAbstractItemModel::span(const QModelIndex &index) const
index 로 표시되는 항목의 행 및 열 범위를 반환합니다.
참고: 현재 span은 사용되지 않습니다.
[virtual slot] bool QAbstractItemModel::submit()
모델이 캐시된 정보를 영구 저장소에 제출해야 함을 알립니다. 이 함수는 일반적으로 행 편집에 사용됩니다.
오류가 없으면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.
revert()도 참조하십시오 .
[virtual] Qt::DropActions QAbstractItemModel::supportedDragActions() const
이 모델의 데이터에서 지원하는 작업을 반환합니다.
기본 구현은 ` supportedDropActions()`를 반환합니다. 추가 동작을 지원하려면 이 함수를 재구현하십시오.
QAbstractItemView::startDrag()은 드래그가 발생할 때 supportedDragActions()를 기본값으로 사용합니다.
Qt::DropActions 및 항목 뷰에서 드래그 앤 드롭 사용도 참조하십시오.
[virtual] Qt::DropActions QAbstractItemModel::supportedDropActions() const
이 모델에서 지원하는 드롭 동작을 반환합니다.
기본 구현은 ` Qt::CopyAction`를 반환합니다. 추가 동작을 지원하려면 이 함수를 재구현하십시오. 또한 추가 작업을 처리하려면 ` dropMimeData()` 함수도 재구현해야 합니다.
dropMimeData(), Qt::DropActions 및 항목 뷰에서 드래그 앤 드롭 사용도 참조하십시오 .
© 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.