QSqlRelationalTableModel Class
QSqlRelationalTableModel 클래스는 외래 키를 지원하는 단일 데이터베이스 테이블에 대한 편집 가능한 데이터 모델을 제공합니다. 더 보기...
Header: | #include <QSqlRelationalTableModel> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
qmake: | QT += sql |
상속합니다: | QSqlTableModel |
- 상속된 멤버를 포함한 모든 멤버의 목록
- QSqlRelationalTableModel은 데이터베이스 클래스의 일부입니다.
공용 유형
enum | JoinMode { InnerJoin, LeftJoin } |
공용 함수
QSqlRelationalTableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase()) | |
virtual | ~QSqlRelationalTableModel() |
QSqlRelation | relation(int column) const |
virtual QSqlTableModel * | relationModel(int column) const |
void | setJoinMode(QSqlRelationalTableModel::JoinMode joinMode) |
virtual void | setRelation(int column, const QSqlRelation &relation) |
재구현된 공용 함수
virtual void | clear() override |
virtual QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const override |
virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
virtual bool | select() override |
virtual bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override |
virtual void | setTable(const QString &table) override |
공용 슬롯
virtual void | revertRow(int row) override |
재구현된 보호 함수
virtual bool | insertRowIntoTable(const QSqlRecord &values) override |
virtual QString | orderByClause() const override |
virtual QString | selectStatement() const override |
virtual bool | updateRowInTable(int row, const QSqlRecord &values) override |
상세 설명
QSqlRelationalTableModel은 QSqlTableModel 처럼 작동하지만 열을 다른 데이터베이스 테이블에 외래 키로 설정할 수 있습니다.
![]() | ![]() |
왼쪽 스크린샷은 QTableView 의 일반 QSqlTableModel 을 보여줍니다. 외래 키(city
및 country
)는 사람이 읽을 수 있는 값으로 해석되지 않습니다. 오른쪽 스크린샷은 외래 키가 사람이 읽을 수 있는 텍스트 문자열로 해석된 QSqlRelationalTableModel을 보여줍니다.
다음 코드 스니펫은 QSqlRelationalTableModel이 설정된 방법을 보여줍니다:
model->setTable("employee"); model->setRelation(2, QSqlRelation("city", "id", "name")); model->setRelation(3, QSqlRelation("country", "id", "name"));
setRelation() 함수 호출은 두 테이블 간의 관계를 설정합니다. 첫 번째 호출은 employee
테이블의 열 2가 city
테이블의 id
필드와 매핑되는 외래 키이며, 뷰가 city
의 name
필드를 사용자에게 표시하도록 지정합니다. 두 번째 호출은 열 3에 대해 비슷한 작업을 수행합니다.
읽기-쓰기 QSqlRelationalTableModel을 사용하는 경우 뷰에서 QSqlRelationalDelegate 을 사용하고 싶을 것입니다. 기본 델리게이트와 달리 QSqlRelationalDelegate 는 다른 테이블에 대한 외래 키인 필드에 대한 콤보 상자를 제공합니다. 이 클래스를 사용하려면 QSqlRelationalDelegate 의 인스턴스가 있는 뷰에서 QAbstractItemView::setItemDelegate()를 호출하기만 하면 됩니다:
std::unique_ptr<QTableView> view{new QTableView}; view->setModel(model); view->setItemDelegate(new QSqlRelationalDelegate(view.get()));
relationaltablemodel 예제에서는 테이블에 외래 키 지원을 제공하기 위해 QSqlRelationalDelegate 와 함께 QSqlRelationalTableModel을 사용하는 방법을 보여 줍니다.
참고:
- 테이블에 기본 키가 선언되어 있어야 합니다.
- 테이블의 기본 키는 다른 테이블과의 관계를 포함하지 않을 수 있습니다.
- 관계형 테이블에 참조된 테이블에 존재하지 않는 행을 참조하는 키가 포함된 경우 잘못된 키가 포함된 행은 모델을 통해 노출되지 않습니다. 사용자 또는 데이터베이스는 참조 무결성을 유지할 책임이 있습니다.
- 관계의 표시 열 이름이 관계 테이블의 열 이름으로도 사용되는 경우 또는 둘 이상의 관계에서 표시 열 이름으로 사용되는 경우 별칭이 지정됩니다. 별칭은 관계의 테이블 이름, 표시 열 이름 및 밑줄로 결합된 고유 ID(예: tablename_columnname_id)입니다. QSqlRecord::fieldName()는 별칭이 지정된 열 이름을 반환합니다. 중복이 감지되면 중복 표시 열 이름의 모든 항목이 별칭이 지정되지만 기본 테이블의 열 이름에는 별칭 지정이 수행되지 않습니다. 앨리어싱은 QSqlRelation 에는 영향을 주지 않으므로 QSqlRelation::displayColumn()은 원래 표시 열 이름을 반환합니다.
- 참조 테이블 이름이 별칭으로 지정됩니다. 별칭은 "relTblAl"이라는 단어와 밑줄로 연결된 관계된 열 인덱스입니다(예: relTblAl_2). 별칭은 테이블을 필터링하는 데 사용할 수 있습니다(예: setFilter("relTblAl_2='Oslo' 또는 relTblAl_3='USA'")).
- setData()를 사용하는 경우 역할은 항상 Qt::EditRole 이어야 하고 data()를 사용하는 경우 역할은 항상 Qt::DisplayRole 이어야 합니다.
QSqlRelation, QSqlRelationalDelegate, 관계형 테이블 모델 예시도참조하세요 .
멤버 유형 문서
enum QSqlRelationalTableModel::JoinMode
상수 | 값 | 설명 |
---|---|---|
QSqlRelationalTableModel::InnerJoin | 0 | - Inner 조인 모드, 두 테이블에 일치하는 항목이 하나 이상 있을 때 행을 반환합니다. |
QSqlRelationalTableModel::LeftJoin | 1 | - 왼쪽 조인 모드에서는 오른쪽 테이블(table_name2)에 일치하는 항목이 없는 경우에도 왼쪽 테이블(table_name1)의 모든 행을 반환합니다. |
QSqlRelationalTableModel::setJoinMode()도 참조하세요 .
멤버 함수 문서
[explicit]
QSqlRelationalTableModel::QSqlRelationalTableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase())
빈 QSqlRelationalTableModel을 만들고 부모를 parent 로 설정하고 데이터베이스 연결을 db 으로 설정합니다. db 가 유효하지 않으면 기본 데이터베이스 연결이 사용됩니다.
[virtual noexcept]
QSqlRelationalTableModel::~QSqlRelationalTableModel()
개체를 파괴하고 할당된 모든 리소스를 해제합니다.
[override virtual]
void QSqlRelationalTableModel::clear()
다시 구현합니다: QSqlTableModel::clear().
[override virtual]
QVariant QSqlRelationalTableModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
재구현합니다: QSqlTableModel::data(const QModelIndex &index, int role) const.
setData()도 참조하십시오 .
[override virtual protected]
bool QSqlRelationalTableModel::insertRowIntoTable(const QSqlRecord &values)
재구현합니다: QSqlTableModel::insertRowIntoTable(const QSqlRecord &values).
[override virtual protected]
QString QSqlRelationalTableModel::orderByClause() const
재구현합니다: QSqlTableModel::orderByClause() const.
QSqlRelation QSqlRelationalTableModel::relation(int column) const
column 열에 대한 관계를 반환하거나 관계가 설정되지 않은 경우 잘못된 관계를 반환합니다.
setRelation() 및 QSqlRelation::isValid()도 참조하세요 .
[virtual]
QSqlTableModel *QSqlRelationalTableModel::relationModel(int column) const
column 이 외래 키인 테이블에 액세스하기 위한 QSqlTableModel 객체를 반환하거나 지정된 column 에 대한 관계가 없는 경우 nullptr
객체를 반환합니다.
반환된 객체는 QSqlRelationalTableModel 에 의해 소유됩니다.
setRelation() 및 relation()도 참조하세요 .
[override virtual]
bool QSqlRelationalTableModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
재구현합니다: QSqlTableModel::removeColumns(int column, int count, const QModelIndex &parent).
[override virtual slot]
void QSqlRelationalTableModel::revertRow(int row)
다시 구현합니다: QSqlTableModel::revertRow(int row).
[override virtual]
bool QSqlRelationalTableModel::select()
다시 구현합니다: QSqlTableModel::select().
[override virtual protected]
QString QSqlRelationalTableModel::selectStatement() const
재구현합니다: QSqlTableModel::selectStatement() const.
[override virtual]
bool QSqlRelationalTableModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
재구현합니다: QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role).
지정된 index 을 가진 항목의 role 데이터를 지정된 value 로 설정합니다. 편집 전략에 따라 이 값은 데이터베이스에 한 번에 적용되거나 모델에 캐시될 수 있습니다.
값을 설정할 수 있으면 true
을 반환하고, 오류(예: index 이 범위를 벗어난 경우)가 발생하면 false를 반환합니다.
관계형 열의 경우 value 은 표시 값이 아닌 인덱스여야 합니다. 인덱스는 참조된 테이블에도 존재해야 하며, 그렇지 않으면 함수는 false
을 반환합니다.
editStrategy(), data(), submit() 및 revertRow()도 참조하세요 .
void QSqlRelationalTableModel::setJoinMode(QSqlRelationalTableModel::JoinMode joinMode)
NULL 외래 키가 있는 행을 표시하거나 숨기도록 joinMode SQL을 설정합니다. InnerJoin 모드(기본값)에서는 이러한 행이 표시되지 않으므로 표시하려면 LeftJoin 모드를 사용하세요.
QSqlRelationalTableModel::JoinMode 를참조하세요 .
[virtual]
void QSqlRelationalTableModel::setRelation(int column, const QSqlRelation &relation)
지정된 column 을 relation 에서 지정한 외부 인덱스가 되도록 합니다.
예제:
model->setTable("employee"); model->setRelation(2, QSqlRelation("city", "id", "name"));
setRelation() 호출은 테이블 employee
의 열 2가 테이블 city
의 필드 id
와 매핑되는 외래 키이며 뷰가 사용자에게 city
의 name
필드를 표시하도록 지정합니다.
참고: 테이블의 기본 키에는 다른 테이블과의 관계가 포함되지 않을 수 있습니다.
relation()도 참조하십시오 .
[override virtual]
void QSqlRelationalTableModel::setTable(const QString &table)
재구현합니다: QSqlTableModel::setTable(const QString &tableName).
[override virtual protected]
bool QSqlRelationalTableModel::updateRowInTable(int row, const QSqlRecord &values)
재구현합니다: QSqlTableModel::updateRowInTable(int row, const QSqlRecord &values).
© 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.