QAbstractItemModel Class

QAbstractItemModel 클래스는 항목 모델 클래스에 대한 추상 인터페이스를 제공합니다. 더 보기...

Header: #include <QAbstractItemModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속합니다: QObject
상속받는 사람:

QAbstractItemModelReplica, QAbstractListModel, QAbstractProxyModel, QAbstractTableModel, QConcatenateTablesProxyModel, QFileSystemModel, QHelpContentModel, QPdfBookmarkModel, 그리고 QStandardItemModel

공용 타입

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

공용 슬롯

virtual void revert()
virtual bool submit()

시그널

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()

상세 설명

QAbstractItemModel 클래스는 항목 모델이 모델/뷰 아키텍처의 다른 컴포넌트와 상호 운용할 수 있도록 하기 위해 사용해야 하는 표준 인터페이스를 정의합니다. 이 클래스는 직접 인스턴스화되어서는 안 됩니다. 대신 이 클래스를 서브클래싱하여 새 모델을 만들어야 합니다.

QAbstractItemModel 클래스는 모델/뷰 클래스 중 하나이며 Qt의 모델/뷰 프레임워크의 일부입니다. QML의 항목 보기 요소 또는 Qt Widgets 모듈의 항목 보기 클래스에 대한 기본 데이터 모델로 사용할 수 있습니다.

QML의 목록 보기 요소나 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()도 구현하고 flags()을 다시 구현하여 ItemIsEditable 이 반환되도록 해야 합니다. headerData () 및 setHeaderData()을 다시 구현하여 모델의 헤더가 표시되는 방식을 제어할 수도 있습니다.

dataChanged() 및 headerDataChanged() 신호는 각각 setData() 및 setHeaderData() 함수를 다시 구현할 때 명시적으로 방출해야 합니다.

사용자 정의 모델은 다른 컴포넌트가 사용할 수 있도록 모델 인덱스를 만들어야 합니다. 이렇게 하려면 해당 항목에 적합한 행 및 열 번호와 포인터 또는 정수 값으로 식별자를 사용하여 createIndex()를 호출합니다. 이러한 값의 조합은 각 항목마다 고유해야 합니다. 사용자 지정 모델은 일반적으로 재구현된 다른 함수에서 이러한 고유 식별자를 사용하여 항목 데이터를 검색하고 항목의 부모 및 자식에 대한 정보에 액세스합니다. 고유 식별자에 대한 자세한 내용은 단순 트리 모델 예시를 참조하세요.

Qt::ItemDataRole 에 정의된 모든 역할을 지원할 필요는 없습니다. 모델에 포함된 데이터 유형에 따라 data() 함수를 구현하여 보다 일반적인 일부 역할에 대해서만 유효한 정보를 반환하는 것이 유용할 수 있습니다. 대부분의 모델은 최소한 Qt::DisplayRole 에 대한 항목 데이터의 텍스트 표현을 제공하며, 잘 작동하는 모델은 Qt::ToolTipRoleQt::WhatsThisRole 에 대한 유효한 정보도 제공해야 합니다. 이러한 역할을 지원하면 모델을 표준 Qt 뷰와 함께 사용할 수 있습니다. 그러나 고도로 전문화된 데이터를 처리하는 일부 모델의 경우 사용자가 정의한 역할에 대해서만 데이터를 제공하는 것이 적절할 수 있습니다.

크기 조정 가능한 데이터 구조에 대한 인터페이스를 제공하는 모델은 insertRows(), removeRows(), insertColumns() 및 removeColumns()의 구현을 제공할 수 있습니다. 이러한 함수를 구현할 때는 모델의 차원이 변경되기 전과 후에 연결된 모든 뷰에 변경 사항을 알리는 것이 중요합니다:

이러한 함수가 방출하는 비공개 신호는 데이터를 사용할 수 없게 되기 전에 연결된 컴포넌트가 조치를 취할 수 있는 기회를 제공합니다. 또한 이러한 시작 및 종료 함수로 삽입 및 제거 작업을 캡슐화하면 모델에서 persistent model indexes 을 올바르게 관리할 수 있습니다. 선택 항목이 올바르게 처리되도록 하려면 이러한 함수를 호출해야 합니다. 하위 항목이 있는 항목을 삽입하거나 제거하는 경우 하위 항목에 대해 이러한 함수를 호출할 필요가 없습니다. 즉, 부모 항목이 자식 항목을 처리합니다.

점진적으로 채워지는 모델을 만들려면 fetchMore() 및 canFetchMore()을 다시 구현하면 됩니다. fetchMore ()를 다시 구현하여 모델에 행을 추가하는 경우 beginInsertRows() 및 endInsertRows()를 호출해야 합니다.

스레드 안전

QObject의 서브 클래스이기 때문에 QAbstractItemModel은 thread-safe 이 아닙니다. 모든 QAbstractItemModel 모델 관련 API는 모델 객체가 있는 스레드에서만 호출되어야 합니다. QAbstractItemModel이 뷰와 연결되어 있는 경우, 이는 뷰가 있는 곳인 GUI 스레드를 의미하며, GUI 스레드에서 모델을 호출하게 됩니다. 백그라운드 스레드를 사용하여 모델의 콘텐츠를 채우거나 수정하는 것은 가능하지만 백그라운드 스레드에서는 모델 관련 API를 직접 호출할 수 없으므로 주의가 필요합니다. 대신 업데이트를 대기열에 넣고 메인 스레드에서 적용해야 합니다. 이 작업은 큐 연결을 사용하여 수행할 수 있습니다.

모델 클래스, 모델 서브클래싱 참조, QModelIndex, QAbstractItemView, 항목 보기에서 드래그 앤 드롭 사용하기, 간단한 트리 모델 예제, 편집 가능한 트리 모델 예제더 가져오기 예제를참조하세요 .

멤버 유형 문서

열거형 클래스 QAbstractItemModel::CheckIndexOption
플래그 QAbstractItemModel::CheckIndexOptions

이 열거형은 QAbstractItemModel::checkIndex()가 수행하는 검사를 제어하는 데 사용할 수 있습니다.

상수설명
QAbstractItemModel::CheckIndexOption::NoOption0x0000검사 옵션이 지정되지 않았습니다.
QAbstractItemModel::CheckIndexOption::IndexIsValid0x0001QAbstractItemModel::checkIndex()로 전달된 모델 인덱스가 유효한 모델 인덱스인지 확인합니다.
QAbstractItemModel::CheckIndexOption::DoNotUseParent0x0002QAbstractItemModel::checkIndex()로 전달된 인덱스의 부모 사용과 관련된 검사를 수행하지 않습니다.
QAbstractItemModel::CheckIndexOption::ParentIsInvalid0x0004QAbstractItemModel::checkIndex()로 전달된 모델 인덱스의 부모가 잘못된 모델 인덱스인지 확인합니다. 이 옵션과 DoNotUseParent가 모두 지정되면 이 옵션은 무시됩니다.

CheckIndexOptions 유형은 QFlags<CheckIndexOption>에 대한 typedef입니다. 이 유형은 CheckIndexOption 값의 OR 조합을 저장합니다.

enum QAbstractItemModel::LayoutChangeHint

이 열거형은 모델이 레이아웃을 변경하는 방식을 설명합니다.

Constant설명
QAbstractItemModel::NoLayoutChangeHint0사용할 수 있는 힌트가 없습니다.
QAbstractItemModel::VerticalSortHint1행이 정렬 중입니다.
QAbstractItemModel::HorizontalSortHint2열이 정렬 중입니다.

수직 정렬 힌트 및 수평 정렬 힌트는 항목이 동일한 부모 내에서 이동 중이며, 모델에서 다른 부모로 이동되지 않고 필터링되거나 필터링되지 않는다는 의미를 갖습니다.

멤버 함수 문서

[explicit] QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)

주어진 parent 으로 추상적인 아이템 모델을 구축합니다.

[virtual noexcept] QAbstractItemModel::~QAbstractItemModel()

추상 아이템 모델을 삭제합니다.

[protected] void QAbstractItemModel::beginInsertColumns(const QModelIndex &parent, int first, int last)

열 삽입 작업을 시작합니다.

하위 클래스에서 insertColumns()를 다시 구현할 때는 모델의 기본 데이터 저장소에 데이터를 삽입하기 전에 이 함수를 호출해야 합니다.

parent 인덱스는 새 열이 삽입되는 부모에 해당하며, firstlast 은 새 열이 삽입된 후 갖게 될 열 번호입니다.

열 삽입하기모델의 항목에 삽입할 열 범위의 첫 번째 및 마지막 열 번호를 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 4번째 열 앞에 3개의 열을 삽입하므로 first 은 4, last 은 6이 됩니다:

beginInsertColumns(parent, 4, 6);

이렇게 하면 세 개의 새 열이 열 4, 5, 6으로 삽입됩니다.

열 추가하기열을 추가하려면 마지막 열 뒤에 열을 삽입합니다.

예를 들어 다이어그램에 표시된 것처럼 기존 열 6개(열 5로 끝나는) 모음에 세 개의 열을 추가하므로 first 은 6이 되고 last 은 8이 됩니다:

beginInsertColumns(parent, 6, 8);

이렇게 하면 두 개의 새 열이 열 6, 7, 8로 추가됩니다.

참고: 이 함수는 데이터가 삽입되기 전에 연결된 뷰(또는 프록시)가 처리해야 하는 columnsAboutToBeInserted() 신호를 내보냅니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.

endInsertColumns()도 참조하세요 .

[protected] void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last)

행 삽입 작업을 시작합니다.

하위 클래스에서 insertRows()를 다시 구현할 때는 모델의 기본 데이터 저장소에 데이터를 삽입하기 전에 이 함수를 호출해야 합니다.

parent 인덱스는 새 행이 삽입되는 부모에 해당하며, firstlast 은 새 행이 삽입된 후 갖게 되는 행 번호입니다.

행 삽입하기모델의 항목에 삽입할 행 범위의 첫 번째 및 마지막 행 번호를 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 2행 앞에 3행이 삽입되므로 first 은 2, last 은 4가 됩니다:

beginInsertRows(parent, 2, 4);

이렇게 하면 세 개의 새 행이 행 2, 3, 4로 삽입됩니다.

행 추가하기행을 추가하려면 마지막 행 뒤에 행을 삽입합니다.

예를 들어 다이어그램에 표시된 것처럼 기존 행 4개(행 3으로 끝나는) 모음에 두 행을 추가하므로 first 은 4가 되고 last 은 5가 됩니다:

beginInsertRows(parent, 4, 5);

이렇게 하면 두 개의 새 행이 4행과 5행으로 추가됩니다.

참고: 이 함수는 데이터가 삽입되기 전에 연결된 뷰(또는 프록시)가 처리해야 하는 rowsAboutToBeInserted() 신호를 내보냅니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.

endInsertRows()도 참조하세요 .

[protected] bool QAbstractItemModel::beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)

열 이동 작업을 시작합니다.

서브클래스를 다시 구현할 때 이 메서드는 모델에서 엔티티 이동을 간소화합니다. 이 메서드는 모델에서 사용자가 직접 수행해야 하는 영구 인덱스 이동을 담당합니다. layoutAboutToBeChangedlayoutChangedchangePersistentIndex 와 함께 직접 전송하는 대신 startMoveColumns 및 endMoveColumns 를 사용하는 것이 좋습니다.

sourceParent 인덱스는 열이 이동되는 상위 인덱스에 해당하며 sourceFirstsourceLast 는 이동되는 열의 첫 번째 및 마지막 열 번호입니다. destinationParent 인덱스는 해당 열이 이동되는 상위 인덱스에 해당합니다. destinationChild 은 열이 이동될 열입니다. 즉, sourceParent 에서 sourceFirst 열의 인덱스는 destinationParent 에서 destinationChild 열이 되고 다른 모든 열은 sourceLast 까지 이동됩니다.

그러나 동일한 상위에서 열을 아래로 이동하는 경우(sourceParentdestinationParent 은 동일) 해당 열은 destinationChild 인덱스 앞에 배치됩니다. 즉, 0과 1 열을 이동하여 1과 2 열이 되게 하려면 destinationChild 이 3이 되어야 합니다. 이 경우 소스 열 i ( sourceFirstsourceLast 사이에 있는)의 새 인덱스는 (destinationChild-sourceLast-1+i) 입니다.

sourceParentdestinationParent 이 동일한 경우 destinationChildsourceFirstsourceLast + 1 의 범위 내에 있지 않은지 확인해야 합니다. 또한 열을 자신의 자식이나 상위 열로 이동하려고 시도하지 않아야 합니다. 이 메서드는 두 조건 중 하나라도 참이면 false 을 반환하며, 이 경우 이동 작업을 중단해야 합니다.

endMoveColumns()도 참조하세요 .

[protected] bool QAbstractItemModel::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)

행 이동 연산을 시작합니다.

서브클래스를 다시 구현할 때 이 메서드는 모델에서 엔티티 이동을 단순화합니다. 이 메서드는 모델에서 사용자가 직접 수행해야 하는 영구 인덱스 이동을 담당합니다. layoutAboutToBeChangedlayoutChangedchangePersistentIndex 와 함께 직접 전송하는 대신 startMoveRows 및 endMoveRows 를 사용하는 것이 좋습니다.

sourceParent 인덱스는 행이 이동되는 상위 인덱스에 해당하며 sourceFirstsourceLast 는 이동될 행의 첫 번째 및 마지막 행 번호입니다. destinationParent 인덱스는 해당 행이 이동되는 상위 인덱스에 해당합니다. destinationChild 은 행이 이동될 행입니다. 즉, sourceParent 에서 sourceFirst 행의 인덱스는 destinationParent 에서 destinationChild 행이 되고 다른 모든 행은 sourceLast 까지 이동합니다.

그러나 동일한 상위에서 행을 아래로 이동하는 경우(sourceParentdestinationParent 은 동일) 행은 destinationChild 인덱스 앞에 배치됩니다. 즉, 0과 1 행을 이동하여 1과 2 행이 되게 하려면 destinationChild 이 3이 되어야 합니다. 이 경우 소스 행 i ( sourceFirstsourceLast 사이에 있는)의 새 인덱스는 (destinationChild-sourceLast-1+i) 입니다.

sourceParentdestinationParent 이 동일한 경우 destinationChildsourceFirstsourceLast + 1 의 범위 내에 있지 않은지 확인해야 합니다. 또한 행을 자신의 자식이나 조상 중 하나로 이동하려고 시도하지 않아야 합니다. 이 메서드는 두 조건 중 하나라도 참이면 false 을 반환하며, 이 경우 이동 작업을 중단해야 합니다.

행을 다른 상위로 이동모델에서 이동하려는 소스 부모에서 행 범위의 첫 번째 및 마지막 행 번호를 지정합니다. 또한 스팬을 이동할 대상 상위의 행을 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 소스에서 2행에서 4행까지 세 행을 이동하므로 sourceFirst 은 2, sourceLast 은 4입니다. 대상에서 해당 항목을 2행 위로 이동하므로 destinationChild 은 2가 됩니다.

beginMoveRows(sourceParent, 2, 4, destinationParent, 2);

이렇게 하면 소스의 2, 3, 4 행 세 개가 대상에서 2, 3, 4가 됩니다. 영향을 받는 다른 형제는 그에 따라 이동됩니다.

행을 이동하여 다른 부모에 추가하기행을 다른 부모에 추가하려면 행을 마지막 행 뒤쪽으로 이동합니다.

예를 들어 다이어그램에 표시된 것처럼 기존 행이 6개인 컬렉션(행 5로 끝나는)으로 세 행을 이동하면 destinationChild 은 6이 됩니다:

beginMoveRows(sourceParent, 2, 4, destinationParent, 6);

이렇게 하면 대상 행이 6, 7, 8로 대상 상위의 끝으로 이동합니다.

같은 상위의 행을 위로 이동같은 상위 내에서 행을 이동하려면 이동할 행을 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 2행에서 0행으로 항목 하나를 이동하므로 sourceFirstsourceLast 은 2, destinationChild 은 0이 됩니다.

beginMoveRows(parent, 2, 2, parent, 0);

다른 행도 그에 따라 이동될 수 있습니다. 또한 같은 상위 항목 내에서 항목을 이동할 때는 유효하지 않거나 동작이 없는 이동을 시도해서는 안 됩니다. 위의 예에서 항목 2는 이동 전 2행에 있으므로 이미 있는 2행이나 3행으로 이동할 수 없습니다(3행은 이미 있는 3행 위를 의미하므로 노옵).

같은 상위의 행을 아래로 이동같은 상위 내에서 행을 이동하려면 이동할 행을 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 2행에서 4행으로 항목 하나를 이동하므로 sourceFirstsourceLast 은 2, destinationChild 은 4가 됩니다.

beginMoveRows(parent, 2, 2, parent, 4);

다른 행도 그에 따라 이동될 수 있습니다.

endMoveRows()도 참조하세요 .

[protected] void QAbstractItemModel::beginRemoveColumns(const QModelIndex &parent, int first, int last)

열 제거 작업을 시작합니다.

하위 클래스에서 removeColumns()를 다시 구현할 때는 모델의 기본 데이터 저장소에서 데이터를 제거하기 전에 이 함수를 호출해야 합니다.

parent 인덱스는 새 열이 제거되는 부모에 해당하며, firstlast 은 제거할 첫 번째 및 마지막 열의 열 번호입니다.

열 제거하기모델의 항목에서 제거하려는 열 범위의 첫 번째 및 마지막 열 번호를 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 4열부터 6열까지 세 개의 열을 제거하므로 first 은 4, last 은 6입니다:

beginRemoveColumns(parent, 4, 6);

참고: 이 함수는 데이터가 제거되기 전에 연결된 뷰(또는 프록시)가 처리해야 하는 columnsAboutToBeRemoved() 신호를 내보냅니다. 그렇지 않으면 뷰가 유효하지 않은 상태가 될 수 있습니다.

endRemoveColumns()도 참조하세요 .

[protected] void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last)

행 제거 작업을 시작합니다.

하위 클래스에서 removeRows()를 다시 구현할 때는 모델의 기본 데이터 저장소에서 데이터를 제거하기 전에 이 함수를 호출해야 합니다.

parent 인덱스는 새 행이 제거되는 부모에 해당하며, firstlast 은 제거할 행의 행 번호입니다.

행 제거하기모델의 항목에서 제거할 행 범위의 첫 번째 및 마지막 행 번호를 지정합니다.

예를 들어 다이어그램에 표시된 것처럼 2행에서 3행까지 두 행을 제거하므로 first 은 2, last 은 3이 됩니다:

beginRemoveRows(parent, 2, 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 을 반환합니다. 이 기본 구현은 datamimeTypes() 목록에 하나 이상의 형식이 있는지, action 가 모델의 supportedDropActions() 중 하나인지만 확인합니다.

row, column, parent 에서 actiondata 를 삭제할 수 있는지 테스트하려면 사용자 정의 모델에서 이 함수를 다시 구현하세요. 해당 테스트가 필요하지 않은 경우에는 이 함수를 다시 구현할 필요가 없습니다.

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}를 지정된 to 모델 인덱스 목록으로 변경합니다.

지정된 from 모델 인덱스 목록의 인덱스와 동일한 영구 모델 인덱스가 없으면 아무 것도 변경되지 않습니다.

persistentIndexList() 및 changePersistentIndex()도 참조하세요 .

bool QAbstractItemModel::checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const

이 함수는 index 이 모델에 대한 합법적인 모델 인덱스인지 여부를 확인합니다. 법적 모델 인덱스는 유효하지 않은 모델 인덱스이거나 다음 조건을 모두 충족하는 유효한 모델 인덱스입니다:

  • 인덱스의 모델이 this 입니다;
  • 인덱스의 행이 0보다 크거나 같습니다;
  • 인덱스의 행이 인덱스 상위의 행 수보다 작습니다;
  • 인덱스의 열이 0보다 크거나 같습니다;
  • 인덱스의 열이 인덱스 부모의 열 수보다 작습니다.

options 인수는 이러한 검사 중 일부를 변경할 수 있습니다. optionsIndexIsValid 이 포함된 경우 index 는 유효한 인덱스여야 하며, 이는 유효한 인덱스를 기대하는 data() 또는 setData()와 같은 함수를 다시 구현할 때 유용합니다.

optionsDoNotUseParent 이 포함되어 있으면 parent() 를 호출하는 검사가 생략되므로 parent() 재구현에서 이 함수를 호출할 수 있습니다(그렇지 않으면 무한 재귀와 충돌이 발생할 수 있습니다).

optionsDoNotUseParent 이 포함되어 있지 않고 ParentIsInvalid 이 포함되어 있는 경우, 부모 인덱스가 유효하지 않은지 확인하는 추가 검사가 수행됩니다. 이 함수는 모델 인덱스에 유효한 상위 인덱스가 없어야 하는 목록이나 테이블과 같은 플랫 모델을 구현할 때 유용합니다.

이 함수는 모든 검사에 성공하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다. 이 함수는 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 항목 아래에 firstlast 사이에 배치됩니다.

참고: 이 신호에 연결된 컴포넌트는 이 신호를 사용하여 모델의 치수 변경에 적응합니다. 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 항목 아래에 있는 firstlast 사이의 항목입니다.

참고: 이 신호에 연결된 컴포넌트는 이 신호를 사용하여 모델의 치수 변경에 적응합니다. QAbstractItemModel 구현에서만 방출할 수 있으며 서브클래스 코드에서는 명시적으로 방출할 수 없습니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

insertColumns() 및 beginInsertColumns()도 참조하세요 .

[private signal] void QAbstractItemModel::columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)

이 신호는 모델 내에서 열이 이동된 후에 발생합니다. 지정된 sourceParent 항목 아래에 있는 sourceStartsourceEnd 사이의 항목이 destinationColumn 열부터 destinationParent 으로 이동했습니다.

참고: 이 신호에 연결된 컴포넌트는 이 신호를 사용하여 모델의 치수 변경에 적응합니다. QAbstractItemModel 구현에서만 방출할 수 있으며 서브클래스 코드에서는 명시적으로 방출할 수 없습니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

beginMoveRows()도 참조하세요 .

[private signal] void QAbstractItemModel::columnsRemoved(const QModelIndex &parent, int first, int last)

이 신호는 모델에서 열이 제거된 후에 발생합니다. 제거된 항목은 지정된 parent 항목 아래에 있는 first ~ last 사이의 항목입니다.

참고: 이 신호에 연결된 컴포넌트는 이 신호를 사용하여 모델의 크기 변경에 적응합니다. QAbstractItemModel 구현에서만 방출할 수 있으며 서브클래스 코드에서는 명시적으로 방출할 수 없습니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

removeColumns() 및 beginRemoveColumns()도 참조하세요 .

[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, const void *ptr = nullptr) const

내부 포인터 ptr 를 사용하여 주어진 rowcolumn 에 대한 모델 인덱스를 생성합니다.

QSortFilterProxyModel 을 사용하는 경우 해당 인덱스에는 자체 내부 포인터가 있습니다. 모델 외부에서 이 내부 포인터에 액세스하는 것은 바람직하지 않습니다. 대신 data() 함수를 사용하세요.

이 함수는 모델 서브클래스가 모델 인덱스를 생성하는 데 사용해야 하는 일관된 인터페이스를 제공합니다.

[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, quintptr id) const

내부 식별자 id 를 사용하여 주어진 rowcolumn 에 대한 모델 인덱스를 생성합니다.

이 함수는 모델 서브클래스가 모델 인덱스를 생성하는 데 사용해야 하는 일관된 인터페이스를 제공합니다.

QModelIndex::internalId()도 참조하세요 .

[pure virtual invokable] QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const

index 에서 참조한 항목에 대해 지정된 role 에 저장된 데이터를 반환합니다.

참고: 반환할 값이 없으면 유효하지 않은 (기본값으로 구성된) QVariant 을 반환합니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하세요.

Qt::ItemDataRole, setData() 및 headerData()도 참조하세요 .

[signal] void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())

이 신호는 기존 항목의 데이터가 변경될 때마다 발생합니다.

항목의 부모가 같은 경우 영향을 받는 항목은 topLeftbottomRight 사이의 항목입니다. 항목의 부모가 같지 않으면 동작이 정의되지 않습니다.

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, columnparent 은 작업이 종료된 모델 내 항목의 위치를 나타냅니다. 올바른 위치에서 작업을 완료하는 것은 모델의 책임입니다.

예를 들어 QTreeView 에 있는 항목에 대한 드롭 작업을 수행하면 새 항목이 row, columnparent 에 지정된 항목의 하위 항목으로 삽입되거나 해당 항목의 형제 항목으로 삽입될 수 있습니다.

rowcolumn 이 -1 인 경우 삭제된 데이터가 parent 에 직접 삭제된 것으로 간주되어야 함을 의미합니다. 일반적으로 이는 데이터를 parent 의 하위 항목으로 추가하는 것을 의미합니다. rowcolumn 이 0보다 크거나 같으면 지정된 parent 에서 지정된 rowcolumn 바로 직전에 드롭이 발생했음을 의미합니다.

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 을 참조하세요.

parent() 및 index()도 참조하세요 .

[invokable] bool QAbstractItemModel::hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const

parent모델이 rowcolumn 에 대해 유효한 QModelIndex 을 반환하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하세요.

[virtual invokable] QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

지정된 rolesection 에 대한 데이터를 지정된 orientation 과 함께 헤더에 반환합니다.

가로 헤더의 경우 섹션 번호는 열 번호에 해당합니다. 마찬가지로 세로형 헤더의 경우 섹션 번호는 행 번호에 해당합니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하세요.

Qt::ItemDataRole, setHeaderData() 및 QHeaderView참조하세요 .

[signal] void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)

이 신호는 헤더가 변경될 때마다 발생합니다. orientation 은 가로 또는 세로 헤더가 변경되었는지 여부를 나타냅니다. first 에서 last 로의 헤더 섹션을 업데이트해야 합니다.

setHeaderData() 함수를 다시 구현할 때는 이 신호를 명시적으로 전송해야 합니다.

열 또는 행 수를 변경하는 경우 이 신호를 보낼 필요는 없지만 시작/끝 함수를 사용합니다(자세한 내용은 QAbstractItemModel 클래스 설명의 서브클래싱 섹션 참조).

headerData(), setHeaderData() 및 dataChanged()도 참조하세요 .

[pure virtual invokable] QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const

주어진 row, columnparent 인덱스로 지정된 모델에서 항목의 인덱스를 반환합니다.

하위 클래스에서 이 함수를 다시 구현할 때는 createIndex()를 호출하여 다른 컴포넌트가 모델의 항목을 참조하는 데 사용할 수 있는 모델 인덱스를 생성하세요.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하세요.

createIndex()도 참조하세요 .

[invokable] bool QAbstractItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())

지정된 parent 의 하위 항목에 지정된 column 앞에 단일 열을 삽입합니다.

열이 삽입되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하세요.

insertColumns(), insertRow() 및 removeColumn()도 참조하세요 .

[virtual invokable] bool QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())

이를 지원하는 모델에서는 지정된 column 앞에 count 새 열을 모델에 삽입합니다. 각 새 열의 항목은 parent 모델 인덱스로 표시되는 항목의 하위 항목이 됩니다.

column 이 0이면 기존 열 앞에 열이 추가됩니다.

columncolumnCount()인 경우 열은 기존 열에 추가됩니다.

parent 에 자식이 없는 경우 count 열이 있는 단일 행이 삽입됩니다.

열이 성공적으로 삽입되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

기본 클래스 구현은 아무 작업도 수행하지 않고 false 을 반환합니다.

자체 모델을 구현하는 경우 삽입을 지원하려면 이 함수를 다시 구현하면 됩니다. 또는 데이터를 변경하기 위한 자체 API를 제공할 수도 있습니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 을 참조하세요.

insertRows(), removeColumns(), beginInsertColumns() 및 endInsertColumns()도 참조하세요 .

[invokable] bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())

지정된 parent 의 하위 항목에 지정된 row 앞에 한 행을 삽입합니다.

참고: 이 함수는 가상 메서드 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인 경우 행은 상위의 기존 행 앞에 추가됩니다.

rowrowCount()인 경우 행은 상위의 기존 행에 추가됩니다.

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()를 호출하기 전에 모든 영구 모델 인덱스를 업데이트해야 합니다. 즉, 구조가 변경되면

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

지정된 role 에 저장된 데이터가 지정된 value 과 일치하는 start 인덱스의 열에 있는 항목에 대한 인덱스 목록을 반환합니다. 검색이 수행되는 방식은 지정된 flags 에 의해 정의됩니다. 반환되는 목록은 비어 있을 수 있습니다. 또한 예를 들어 프록시 모델을 사용하는 경우 목록의 결과 순서가 모델의 순서와 일치하지 않을 수 있다는 점에 유의하세요. 결과 순서는 신뢰할 수 없습니다.

검색은 start 인덱스에서 시작하여 일치하는 데이터 항목의 수가 hits, 검색이 마지막 행에 도달하거나 start 에 다시 도달할 때까지 계속됩니다( MatchWrapflags 에 지정되었는지 여부에 따라 다름). 일치하는 모든 항목을 검색하려면 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 에서 sourceColumnsourceParent 에서 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 아래의 지정된 sourceColumn 열로 시작하는 count 열을 부모 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 에서 sourceRowsourceParent 에서 destinationChild 로 이동합니다.

행을 성공적으로 이동한 경우 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 를 채웁니다.

기본 구현은 스팬의 각 역할에 대해 간단히 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 객체에 이미 할당된 메모리를 재사용할 수 있는 반면 후자는 항상 새 변형을 할당하고 이전 변형을 소멸하기 때문입니다.

뷰는 이전 호출에서 사용된 스팬을 사용하여 multiData()를 호출할 수 있으므로 이미 일부 데이터가 포함되어 있을 수 있습니다. 따라서 모델이 주어진 역할에 대한 데이터를 반환할 수 없는 경우 해당 QModelRoleData 객체에서 데이터를 지워야 합니다. 이 작업은 QModelRoleData::clearData()를 호출하거나 이와 유사하게 기본 구성 QVariant 등을 설정하여 수행할 수 있습니다. 데이터를 지우지 않으면 뷰에서 "이전" 데이터를 해당 역할에 사용해야 하는 것으로 간주합니다.

마지막으로, 코드 중복을 피하기 위해 하위 클래스에서 하나의 요소만 스팬을 제공하여 data()를 multiData()로 다시 구현할 수도 있습니다:

QVariant MyModel::data(const QModelIndex &index, int role) const
{
    QModelRoleData roleData(role);
    multiData(index, roleData);
    return roleData.data();
}

참고: 모델은 스팬의 역할을 수정하거나 스팬 요소를 재정렬할 수 없습니다. 그렇게 하면 정의되지 않은 동작이 발생합니다.

참고: 이 함수에 유효하지 않은 모델 인덱스를 전달하는 것은 불법입니다.

이 함수는 Qt 6.0에 도입되었습니다.

QModelRoleDataSpandata()도 참조하세요 .

[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())

지정된 parent 의 하위 항목에서 지정된 column 을 제거합니다.

열이 제거되면 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())

지정된 parent 의 하위 항목에서 지정된 row 을 제거합니다.

행이 제거되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

이 함수는 removeRows()를 호출하는 편의 함수입니다. removeRows ()의 QAbstractItemModel 구현은 아무 작업도 수행하지 않습니다.

참고: 이 함수는 메타 객체 시스템과 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) 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::DisplayRoledisplay
Qt::DecorationRole장식
Qt::EditRole편집
Qt::ToolTipRoletoolTip
Qt::StatusTipRolestatusTip
Qt::WhatsThisRolewhatsThis

[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 항목 아래에 startend 사이에 배치됩니다.

참고: 이 신호에 연결된 컴포넌트는 이 신호를 사용하여 모델의 크기 변경에 적응합니다. 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 항목 아래에 있는 sourceStartsourceEnd 사이의 항목이 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)

헤더에 지정된 rolesection 의 데이터를 지정된 orientation 와 함께 제공된 value 으로 설정합니다.

헤더의 데이터가 업데이트된 경우 true 를 반환하고, 그렇지 않으면 false 을 반환합니다.

이 함수를 다시 구현할 때는 headerDataChanged() 신호를 명시적으로 전송해야 합니다.

Qt::ItemDataRoleheaderData()도 참조하세요 .

[virtual] bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)

index 에서 항목의 역할 데이터를 roles 의 관련 값으로 설정합니다(모든 Qt::ItemDataRole.

성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

roles 에 없는 역할은 수정되지 않습니다.

setData(), data() 및 itemData()도 참조하세요 .

[virtual invokable] QModelIndex QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const

index 에 있는 항목의 경우 rowcolumn 의 형제 항목을 반환하고, 해당 위치에 형제 항목이 없는 경우 잘못된 QModelIndex 을 반환합니다.

sibling()은 항목의 부모를 찾고 이를 사용하여 지정된 rowcolumn 에서 자식 항목의 색인을 검색하는 편의 함수일 뿐입니다.

이 메서드는 구현별 최적화를 위해 선택적으로 재정의할 수 있습니다.

참고: 이 함수는 메타 객체 시스템과 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 로 표시되는 항목의 행 및 열 스팬을 반환합니다.

참고: 현재 스팬은 사용되지 않습니다.

[virtual slot] bool QAbstractItemModel::submit()

모델에 캐시된 정보를 영구 저장소에 제출해야 함을 알립니다. 이 함수는 일반적으로 행 편집에 사용됩니다.

오류가 없으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

revert()도 참조하세요 .

[virtual] Qt::DropActions QAbstractItemModel::supportedDragActions() const

이 모델의 데이터에서 지원되는 작업을 반환합니다.

기본 구현은 supportedDropActions()를 반환합니다. 추가 동작을 지원하려면 이 함수를 다시 구현하세요.

supportedDragActions()는 드래그가 발생할 때 QAbstractItemView::startDrag()에서 기본값으로 사용됩니다.

Qt::DropActions항목 보기에서 드래그 앤 드롭 사용하기를참조하세요 .

[virtual] Qt::DropActions QAbstractItemModel::supportedDropActions() const

이 모델에서 지원하는 드롭 액션을 반환합니다.

기본 구현은 Qt::CopyAction 을 반환합니다. 추가 작업을 지원하려면 이 함수를 다시 구현하세요. 또한 추가 작업을 처리하려면 dropMimeData() 함수를 다시 구현해야 합니다.

dropMimeData(), Qt::DropActions, 및 항목 보기에서 끌어서 놓기 사용도참조하세요 .

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