QDataWidgetMapper Class

QDataWidgetMapper 클래스는 데이터 모델의 섹션과 위젯 간의 매핑을 제공합니다. 더 보기...

Header: #include <QDataWidgetMapper>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QObject

공용 유형

enum SubmitPolicy { AutoSubmit, ManualSubmit }

속성

공용 기능

QDataWidgetMapper(QObject *parent = nullptr)
virtual ~QDataWidgetMapper()
void addMapping(QWidget *widget, int section)
void addMapping(QWidget *widget, int section, const QByteArray &propertyName)
void clearMapping()
int currentIndex() const
QAbstractItemDelegate *itemDelegate() const
QByteArray mappedPropertyName(QWidget *widget) const
int mappedSection(QWidget *widget) const
QWidget *mappedWidgetAt(int section) const
QAbstractItemModel *model() const
Qt::Orientation orientation() const
void removeMapping(QWidget *widget)
QModelIndex rootIndex() const
void setItemDelegate(QAbstractItemDelegate *delegate)
void setModel(QAbstractItemModel *model)
void setOrientation(Qt::Orientation aOrientation)
void setRootIndex(const QModelIndex &index)
void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy)
QDataWidgetMapper::SubmitPolicy submitPolicy() const

공용 슬롯

void revert()
virtual void setCurrentIndex(int index)
void setCurrentModelIndex(const QModelIndex &index)
bool submit()
void toFirst()
void toLast()
void toNext()
void toPrevious()

신호

void currentIndexChanged(int index)

상세 설명

QDataWidgetMapper는 항목 모델의 섹션에 매핑하여 데이터 인식 위젯을 만드는 데 사용할 수 있습니다. 섹션은 방향이 가로(기본값)인 경우 모델의 열이고, 그렇지 않으면 행입니다.

현재 인덱스가 변경될 때마다 각 위젯은 매핑할 때 지정한 속성을 통해 모델의 데이터로 업데이트됩니다. 사용자가 위젯의 콘텐츠를 편집하면 동일한 속성을 사용하여 변경 내용을 읽고 모델에 다시 씁니다. 기본적으로 각 위젯의 user property 은 모델과 위젯 간에 데이터를 전송하는 데 사용됩니다. Qt 4.3부터는 addMapping() 함수를 추가하여 기본 사용자 프로퍼티 대신 명명된 프로퍼티를 사용할 수 있습니다.

사용자 정의 위젯을 지원하도록 항목 델리게이트를 설정할 수 있습니다. 기본적으로 QStyledItemDelegate 은 모델을 위젯과 동기화하는 데 사용됩니다.

다음과 같은 내용을 가진 model 이라는 이름의 아이템 모델이 있다고 가정해 보겠습니다:

1Qt NorwayOslo
2Qt Australia브리즈번
3Qt 미국팔로 알토
4Qt 중국베이징
5Qt 독일Berlin

다음 코드는 모델의 열을 mySpinBox, myLineEditmyCountryChooser 라는 위젯에 매핑합니다:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();

toFirst() 호출 후 mySpinBox1, myLineEditQt Norway, myCountryChooserOslo 값을 표시합니다 . 탐색 함수 toFirst(), toNext(), toPrevious(), toLast() 및 setCurrentIndex()를 사용하여 모델에서 탐색하고 모델의 콘텐츠로 위젯을 업데이트할 수 있습니다.

setRootIndex() 함수를 사용하면 모델의 특정 항목을 루트 인덱스로 지정할 수 있으며, 이 항목의 하위 항목은 사용자 인터페이스에서 관련 위젯에 매핑됩니다.

AutoSubmitManualSubmit 두 가지 제출 정책을 지원합니다. AutoSubmit 는 현재 위젯이 포커스를 잃는 즉시 모델을 업데이트하고, ManualSubmitsubmit()가 호출되지 않는 한 모델을 업데이트하지 않습니다. ManualSubmit 는 사용자가 모든 수정을 취소할 수 있는 대화 상자를 표시할 때 유용합니다. 또한 모델을 표시하는 다른 뷰는 사용자가 모든 수정을 완료하고 제출할 때까지 업데이트되지 않습니다.

QDataWidgetMapper는 외부 수정 사항을 추적합니다. 모델의 내용이 애플리케이션의 다른 모듈에서 업데이트되면 위젯도 업데이트됩니다.

QAbstractItemModelQAbstractItemDelegate참조하세요 .

멤버 유형 문서

enum QDataWidgetMapper::SubmitPolicy

이 열거형은 QDataWidgetMapper 에서 지원할 수 있는 제출 정책을 설명합니다.

Constant설명
QDataWidgetMapper::AutoSubmit0위젯이 포커스를 잃을 때마다 위젯의 현재 값이 항목 모델로 설정됩니다.
QDataWidgetMapper::ManualSubmit1이 모델은 submit()가 호출될 때까지 업데이트되지 않습니다.

속성 문서

currentIndex : int

이 속성은 현재 행 또는 열을 보유합니다.

위젯은 방향이 가로(기본값)인 경우 index 의 행 데이터로 채워지고, 그렇지 않으면 index 의 열 데이터로 채워집니다.

함수에 액세스합니다:

int currentIndex() const
virtual void setCurrentIndex(int index)

통지 신호:

void currentIndexChanged(int index)

setCurrentModelIndex(), toFirst(), toNext(), toPrevious() 및 toLast()도 참조하세요 .

orientation : Qt::Orientation

이 속성은 모델의 방향을 보유합니다.

방향이 Qt::Horizontal (기본값)인 경우 위젯이 데이터 모델의 열에 매핑됩니다. 위젯은 매핑된 열과 currentIndex()가 가리키는 행에서 모델의 데이터로 채워집니다.

다음과 같은 표 형식의 데이터에는 Qt::Horizontal 을 사용합니다:

1Qt NorwayOslo
2Qt 호주브리즈번
3Qt 미국실리콘밸리
4Qt 중국베이징
5Qt 독일Berlin

방향이 Qt::Vertical 로 설정된 경우 위젯이 행에 매핑됩니다. setCurrentIndex ()를 호출하면 현재 열이 변경됩니다. 위젯은 매핑된 행과 currentIndex()가 가리키는 열의 모델 데이터로 채워집니다.

다음과 같은 표 형식의 데이터에는 Qt::Vertical 을 사용합니다:

12345
Qt 노르웨이Qt AustraliaQt 미국Qt ChinaQt 독일
OsloBrisbane실리콘밸리베이징베를린

방향을 변경하면 기존의 모든 매핑이 지워집니다.

기능에 액세스합니다:

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation aOrientation)

submitPolicy : SubmitPolicy

이 속성은 현재 제출 정책을 보유합니다.

현재 제출 정책을 변경하면 모든 위젯이 모델의 현재 데이터로 되돌아갑니다.

액세스 함수:

QDataWidgetMapper::SubmitPolicy submitPolicy() const
void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy)

멤버 함수 문서

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

부모 객체 parent 를 가진 새로운 QDataWidgetMapper를 생성합니다. 기본적으로 방향은 가로이고 제출 정책은 AutoSubmit 입니다.

setOrientation() 및 setSubmitPolicy()도 참조하세요 .

[virtual noexcept] QDataWidgetMapper::~QDataWidgetMapper()

개체를 파괴합니다.

void QDataWidgetMapper::addMapping(QWidget *widget, int section)

모델에서 widgetsection 사이의 매핑을 추가합니다. section 은 방향이 가로(기본값)인 경우 모델에서 열이 되고, 그렇지 않으면 행이 됩니다.

다음 예에서는 myModel 모델에 두 개의 열이 있다고 가정합니다. 첫 번째 열에는 그룹에 속한 사람들의 이름이 들어 있고 두 번째 열에는 그들의 나이가 들어 있습니다. 첫 번째 열은 QLineEdit nameLineEdit 에 매핑되고 두 번째 열은 QSpinBox ageSpinBox 에 매핑됩니다:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(myModel);
mapper->addMapping(nameLineEdit, 0);
mapper->addMapping(ageSpinBox, 1);

참고:

  • widget 이 이미 섹션에 매핑되어 있는 경우 이전 매핑이 새 매핑으로 대체됩니다.
  • 섹션과 위젯 간에는 일대일 매핑만 허용됩니다. 단일 섹션을 여러 위젯에 매핑하거나 단일 위젯을 여러 섹션에 매핑할 수 없습니다.

removeMapping(), mappedSection() 및 clearMapping()도 참조하세요 .

void QDataWidgetMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)

기본적으로 addMapping()과 동일하지만 propertyName 을 지정하여 사용할 속성을 지정할 수 있는 기능이 추가되었습니다.

addMapping()도 참조하세요 .

void QDataWidgetMapper::clearMapping()

모든 매핑을 지웁니다.

addMapping() 및 removeMapping()도 참조하세요 .

[signal] void QDataWidgetMapper::currentIndexChanged(int index)

이 신호는 현재 인덱스가 변경되고 모든 위젯이 새 데이터로 채워진 후에 발신됩니다. index 은 새로운 현재 인덱스입니다.

참고: currentIndex 속성에 대한 알림 신호입니다.

currentIndex() 및 setCurrentIndex()도 참조하세요 .

QAbstractItemDelegate *QDataWidgetMapper::itemDelegate() const

현재 항목 델리게이트를 반환합니다.

setItemDelegate()도 참조하세요 .

QByteArray QDataWidgetMapper::mappedPropertyName(QWidget *widget) const

데이터를 지정된 widget 에 매핑할 때 사용되는 속성의 이름을 반환합니다.

mappedSection(), addMapping(), removeMapping()도 참조하세요 .

int QDataWidgetMapper::mappedSection(QWidget *widget) const

widget 이 매핑된 섹션을 반환하거나 위젯이 매핑되지 않은 경우 -1을 반환합니다.

addMapping() 및 removeMapping()도 참조하세요 .

QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const

section 에 매핑된 위젯을 반환하거나 해당 섹션에 매핑된 위젯이 없는 경우 0을 반환합니다.

addMapping() 및 removeMapping()도 참조하세요 .

QAbstractItemModel *QDataWidgetMapper::model() const

현재 모델을 반환합니다.

setModel()도 참조하세요 .

void QDataWidgetMapper::removeMapping(QWidget *widget)

주어진 widget 에 대한 매핑을 제거합니다.

addMapping() 및 clearMapping()도 참조하세요 .

[slot] void QDataWidgetMapper::revert()

모델의 현재 데이터로 모든 위젯을 다시 채웁니다. 제출하지 않은 모든 변경 사항은 손실됩니다.

submit() 및 setSubmitPolicy()도 참조하세요 .

QModelIndex QDataWidgetMapper::rootIndex() const

현재 루트 인덱스를 반환합니다.

setRootIndex()도 참조하세요 .

[slot] void QDataWidgetMapper::setCurrentModelIndex(const QModelIndex &index)

방향이 가로(기본값)인 경우 현재 인덱스를 index 의 행으로, 그렇지 않으면 index 의 열로 설정합니다.

내부적으로 setCurrentIndex()를 호출합니다. 이 편의 슬롯은 다른 뷰의 selection modelcurrentRowChanged() 또는 currentColumnChanged() 신호에 연결할 수 있습니다.

다음 예는 myTableView 이라는 QTableView 의 선택 항목이 변경될 때마다 모든 위젯을 새 데이터로 업데이트하는 방법을 보여 줍니다:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
connect(myTableView->selectionModel(), &QItemSelectionModel::currentRowChanged,
        mapper, &QDataWidgetMapper::setCurrentModelIndex);

currentIndex()도 참조하세요 .

void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)

항목 델리게이트를 delegate 로 설정합니다. 이 델리게이트는 QAbstractItemDelegate::setEditorData() 및 QAbstractItemDelegate::setModelData()를 사용하여 모델에서 위젯으로, 위젯에서 모델로 데이터를 쓰는 데 사용됩니다.

기존 델리게이트는 제거되지만 삭제되지는 않습니다. QDataWidgetMapperdelegate 에 대한 소유권을 갖지 않습니다.

또한 델리게이트는 QAbstractItemDelegate::commitData() 및 QAbstractItemDelegate::closeEditor()를 사용하여 데이터를 적용할 시기와 편집기를 변경할 시기를 결정합니다.

경고: 위젯 매퍼 또는 뷰 간에 동일한 델리게이트 인스턴스를 공유해서는 안 됩니다. 그렇게 하면 특정 델리게이트에 연결된 각 보기가 closeEditor() 신호를 수신하고 이미 닫힌 편집기에 액세스, 수정 또는 닫으려고 시도할 수 있으므로 부정확하거나 직관적이지 않은 편집 동작이 발생할 수 있습니다.

itemDelegate()도 참조하세요 .

void QDataWidgetMapper::setModel(QAbstractItemModel *model)

현재 모델을 model 로 설정합니다. 다른 모델이 설정되어 있는 경우 이전 모델에 대한 모든 매핑이 지워집니다.

model()도 참조하세요 .

void QDataWidgetMapper::setRootIndex(const QModelIndex &index)

루트 항목을 index 로 설정합니다. 트리의 가지를 표시하는 데 사용할 수 있습니다. 최상위 분기를 표시하려면 잘못된 모델 인덱스를 전달합니다.

rootIndex()도 참조하세요 .

[slot] bool QDataWidgetMapper::submit()

매핑된 위젯의 모든 변경 사항을 모델에 제출합니다.

매핑된 모든 섹션에 대해 항목 델리게이트는 위젯에서 현재 값을 읽고 모델에 설정합니다. 마지막으로 모델의 submit() 메서드가 호출됩니다.

모든 값이 제출된 경우 true 을 반환하고, 그렇지 않으면 거짓을 반환합니다.

참고: 데이터베이스 모델의 경우 QSqlQueryModel::lastError()를 사용하여 마지막 오류를 검색할 수 있습니다.

revert() 및 setSubmitPolicy()도 참조하세요 .

[slot] void QDataWidgetMapper::toFirst()

방향이 가로(기본값)인 경우 모델의 첫 번째 행의 데이터로 위젯을 채우고, 그렇지 않으면 첫 번째 열의 데이터로 위젯을 채웁니다.

이는 setCurrentIndex(0) 을 호출하는 것과 같습니다.

toLast() 및 setCurrentIndex()도 참조하세요 .

[slot] void QDataWidgetMapper::toLast()

방향이 가로(기본값)인 경우 모델의 마지막 행의 데이터로 위젯을 채우고, 그렇지 않으면 마지막 열의 데이터로 위젯을 채웁니다.

내부적으로 setCurrentIndex()를 호출합니다.

toFirst() 및 setCurrentIndex()도 참조하세요 .

[slot] void QDataWidgetMapper::toNext()

방향이 가로(기본값)인 경우 모델의 다음 행의 데이터로 위젯을 채우고, 그렇지 않으면 다음 열의 데이터로 위젯을 채웁니다.

내부적으로 setCurrentIndex()를 호출합니다. 모델에 다음 행이 없으면 아무 작업도 수행하지 않습니다.

toPrevious() 및 setCurrentIndex()도 참조하세요 .

[slot] void QDataWidgetMapper::toPrevious()

방향이 가로(기본값)인 경우 모델의 이전 행의 데이터로 위젯을 채우고, 그렇지 않으면 이전 열의 데이터로 위젯을 채웁니다.

내부적으로 setCurrentIndex()를 호출합니다. 모델에 이전 행이 없으면 아무 작업도 수행하지 않습니다.

toNext() 및 setCurrentIndex()도 참조하세요 .

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