이 페이지에서

QSqlTableModel Class

QSqlTableModel 클래스는 단일 데이터베이스 테이블에 대한 편집 가능한 데이터 모델을 제공합니다. 더 보기...

헤더: #include <QSqlTableModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
상속: QSqlQueryModel
상속받는 클래스:

QSqlRelationalTableModel

공개 유형

enum EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit }

공개 함수

QSqlTableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase())
virtual ~QSqlTableModel()
QSqlDatabase database() const
QSqlTableModel::EditStrategy editStrategy() const
int fieldIndex(const QString &fieldName) const
QString filter() const
bool insertRecord(int row, const QSqlRecord &record)
bool isDirty(const QModelIndex &index) const
bool isDirty() const
QSqlIndex primaryKey() const
QSqlRecord record() const
QSqlRecord record(int row) const
virtual void revertRow(int row)
virtual void setEditStrategy(QSqlTableModel::EditStrategy strategy)
virtual void setFilter(const QString &filter)
bool setRecord(int row, const QSqlRecord &values)
virtual void setSort(int column, Qt::SortOrder order)
virtual void setTable(const QString &tableName)
QString tableName() const

재구현된 공용 함수

virtual void clear() override
virtual bool clearItemData(const QModelIndex &index) override
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
virtual void sort(int column, Qt::SortOrder order) override

공개 슬롯

virtual void revert() override
void revertAll()
virtual bool select()
virtual bool selectRow(int row)
virtual bool submit() override
bool submitAll()

신호

void beforeDelete(int row)
void beforeInsert(QSqlRecord &record)
void beforeUpdate(int row, QSqlRecord &record)
void primeInsert(int row, QSqlRecord &record)

보호된 함수

virtual bool deleteRowFromTable(int row)
virtual bool insertRowIntoTable(const QSqlRecord &values)
virtual QString orderByClause() const
QSqlRecord primaryValues(int row) const
virtual QString selectStatement() const
void setPrimaryKey(const QSqlIndex &key)
virtual bool updateRowInTable(int row, const QSqlRecord &values)

재구현된 보호 함수

virtual QModelIndex indexInQuery(const QModelIndex &item) const override

상세 설명

QSqlTableModel은 단일 테이블의 데이터베이스 레코드를 읽고 쓰는 데 사용되는 고수준 인터페이스입니다. 이 인터페이스는 저수준의 QSqlQuery 을 기반으로 구축되었으며, QTableView 와 같은 뷰 클래스에 데이터를 제공하는 데 사용할 수 있습니다. 예를 들어:

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("employee");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

    QTableView *view = new QTableView;
    view->setModel(model);
    view->hideColumn(0); // don't show the ID
    view->show();

SQL 테이블의 이름과 편집 전략을 설정한 다음, 뷰 헤더에 표시될 레이블을 설정합니다. 편집 전략은 사용자가 뷰에서 수행한 변경 사항이 실제로 데이터베이스에 언제 적용될지를 결정합니다. 가능한 값으로는 OnFieldChange, OnRowChange, OnManualSubmit 가 있습니다.

QSqlTableModel은 뷰에 바인딩하지 않고도 프로그래밍 방식으로 데이터베이스에 액세스하는 데 사용할 수도 있습니다:

    QSqlTableModel model;
    model.setTable("employee");
    model.select();
    int salary = model.record(4).value("salary").toInt();

위의 코드 스니펫은 쿼리 SELECT * from employee 의 결과 집합에서 4번 레코드의 salary 필드를 추출합니다.

setFilter()를 사용하여 필터를 설정하거나, setSort()를 사용하여 정렬 순서를 수정할 수 있습니다. 마지막으로, select()를 호출하여 모델에 데이터를 채워야 합니다.

tablemodel 예제는 QTableView 의 데이터 소스로 QSqlTableModel을 사용하는 방법을 보여줍니다.

QSqlTableModel은 외래 키를 직접 지원하지 않습니다. 외래 키를 해결하려면 QSqlRelationalTableModel 및 QSqlRelationalDelegate 을 사용하십시오.

QSqlRelationalTableModel, QSqlQuery, 모델/뷰 프로그래밍, 테이블 모델 예제 및 캐시된 SQL 테이블항목도 참조하십시오 .

멤버 유형 설명서

enum QSqlTableModel::EditStrategy

이 열거형 유형은 데이터베이스의 값을 편집할 때 어떤 전략을 선택해야 하는지를 나타냅니다.

상수값설명
QSqlTableModel::OnFieldChange0모델에 대한 모든 변경 사항은 데이터베이스에 즉시 적용됩니다.
QSqlTableModel::OnRowChange1사용자가 다른 행을 선택하면 해당 행에 대한 변경 사항이 적용됩니다.
QSqlTableModel::OnManualSubmit2submitAll() 또는 revertAll()이 호출될 때까지 모든 변경 사항은 모델에 캐시됩니다.

참고: 부분적으로만 초기화된 행이 데이터베이스에 삽입되는 것을 방지하기 위해, OnFieldChange 는 새로 삽입된 행에 대해서는 OnRowChange 와 동일하게 동작합니다.

setEditStrategy()도 참조하십시오 .

멤버 함수 설명서

[explicit] QSqlTableModel::QSqlTableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase())

빈 QSqlTableModel을 생성하고, 상위 객체를 parent 로, 데이터베이스 연결을 db 로 설정합니다. db 가 유효하지 않은 경우, 기본 데이터베이스 연결이 사용됩니다.

기본 편집 전략은 OnRowChange 입니다.

[virtual noexcept] QSqlTableModel::~QSqlTableModel()

객체를 삭제하고 할당된 리소스를 모두 해제합니다.

[signal] void QSqlTableModel::beforeDelete(int row)

이 신호는 ` deleteRowFromTable()`가 현재 활성화된 데이터베이스 테이블에서 ` row `를 삭제하기 전에 발생합니다.

[signal] void QSqlTableModel::beforeInsert(QSqlRecord &record)

이 신호는 현재 활성화된 데이터베이스 테이블에 새 행이 삽입되기 전에 ` insertRowIntoTable()` 함수에 의해 발생합니다. 삽입될 값들은 ` record `에 저장되며, 삽입되기 전에 수정할 수 있습니다.

[signal] void QSqlTableModel::beforeUpdate(int row, QSqlRecord &record)

이 신호는 updateRowInTable()에 의해, 현재 활성화된 데이터베이스 테이블의 row 가 record 의 값으로 업데이트되기 전에 발생합니다.

'생성됨'으로 표시된 값만 업데이트된다는 점에 유의하십시오. '생성됨' 플래그는 QSqlRecord::setGenerated() 함수를 통해 설정할 수 있으며, QSqlRecord::isGenerated() 함수를 통해 확인할 수 있습니다.

QSqlRecord::isGenerated()도 참조하십시오 .

[override virtual] void QSqlTableModel::clear()

QSqlQueryModel::clear()를 재구현합니다.

[override virtual] bool QSqlTableModel::clearItemData(const QModelIndex &index)

QAbstractItemModel::clearItemData(const QModelIndex &index)를 재구현합니다.

[override virtual] QVariant QSqlTableModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const

QSqlQueryModel::data(const QModelIndex &item, int role) const를 재구현합니다.

setData()도 참조하십시오 .

QSqlDatabase QSqlTableModel::database() const

모델의 데이터베이스 연결을 반환합니다.

[virtual protected] bool QSqlTableModel::deleteRowFromTable(int row)

현재 활성화된 데이터베이스 테이블에서 지정된 row 를 삭제합니다.

이 메서드는 데이터베이스에 직접 작용하는 저수준 메서드이므로 직접 호출해서는 안 됩니다. 값을 삭제하려면 ` removeRow()` 또는 ` removeRows()`를 사용하십시오. 데이터베이스를 수정할 시점은 모델의 편집 전략에 따라 모델 측에서 결정합니다.

행이 삭제된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

removeRow() 및 removeRows()도 참조하십시오 .

QSqlTableModel::EditStrategy QSqlTableModel::editStrategy() const

현재 편집 전략을 반환합니다.

setEditStrategy()도 참조하십시오 .

int QSqlTableModel::fieldIndex(const QString &fieldName) const

fieldName 필드의 인덱스를 반환하며, 모델에 해당 필드가 없는 경우 -1을 반환합니다.

QString QSqlTableModel::filter() const

현재 설정된 필터를 반환합니다.

setFilter() 및 select()도 참조하십시오 .

[override virtual] Qt::ItemFlags QSqlTableModel::flags(const QModelIndex &index) const

QAbstractTableModel::flags(const QModelIndex &index) const를 재구현합니다.

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

QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role) const를 재구현합니다.

[override virtual protected] QModelIndex QSqlTableModel::indexInQuery(const QModelIndex &item) const

QSqlQueryModel::indexInQuery(const QModelIndex &item) const를 재구현합니다.

모델에서 지정된 item 에 해당하는 데이터베이스 결과 집합 내 값의 인덱스를 반환합니다.

열이나 행이 삽입, 제거 또는 재배치되지 않은 경우 반환 값은 item 과 동일합니다.

item 가 범위를 벗어난 경우나 item 가 결과 집합의 값을 가리키지 않는 경우, 유효하지 않은 모델 인덱스를 반환합니다.

QSqlQueryModel::indexInQuery()도 참조하십시오 .

bool QSqlTableModel::insertRecord(int row, const QSqlRecord &record)

row 위치에 record 를 삽입합니다. row 가 음수인 경우, 레코드는 끝부분에 추가됩니다. 내부적으로 insertRows() 및 setRecord()를 호출합니다.

레코드가 삽입된 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

OnFieldChange 및 OnRowChange 의 경우 변경 사항이 즉시 제출됩니다. 삽입에 실패하더라도 모델에 새로운 행이 남지 않습니다.

insertRows(), removeRows(), setRecord()도 참조하십시오 .

[virtual protected] bool QSqlTableModel::insertRowIntoTable(const QSqlRecord &values)

현재 활성화된 데이터베이스 테이블에 values 값을 삽입합니다.

이 메서드는 데이터베이스에 직접 작용하는 저수준 메서드이므로 직접 호출해서는 안 됩니다. 값을 삽입하려면 insertRow() 및 setData()을 사용하십시오. 데이터베이스를 수정할 시점은 모델의 편집 전략에 따라 결정됩니다.

값을 삽입할 수 있으면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다. 오류 정보는 ` lastError()`를 통해 확인할 수 있습니다.

lastError(), insertRow(), insertRows()도 참조하십시오 .

[override virtual] bool QSqlTableModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())

QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent)를 재구현합니다.

row 위치에 count 개의 빈 행을 삽입합니다. 이 모델은 부모-자식 관계를 지원하지 않으므로 parent 는 유효하지 않아야 합니다.

OnFieldChange 및 OnRowChange 편집 전략의 경우, 한 번에 하나의 행만 삽입할 수 있으며 모델에는 다른 캐시된 변경 사항이 포함되어서는 안 됩니다.

primeInsert() 신호는 새로운 행이 추가될 때마다 발생합니다. 새 행을 기본값으로 초기화하려면 이 신호에 연결하십시오.

편집 전략에 관계없이 행을 제출하지 않습니다.

매개변수가 범위를 벗어났거나 행을 삽입할 수 없는 경우 false 를 반환하고, 그렇지 않은 경우 true 를 반환합니다.

primeInsert() 및 insertRecord()도 참조하십시오 .

bool QSqlTableModel::isDirty(const QModelIndex &index) const

index 인덱스의 값이 더티(dirty) 상태이면 true 를 반환하고, 그렇지 않으면 false를 반환합니다. 더티 값이란 모델에서 수정되었으나 아직 데이터베이스에 기록되지 않은 값을 말합니다.

index 가 유효하지 않거나 존재하지 않는 행을 가리키는 경우 false를 반환합니다.

bool QSqlTableModel::isDirty() const

모델에 데이터베이스에 커밋되지 않은 수정된 값이 포함되어 있으면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.

이 함수는 오버로드된 함수입니다.

[virtual protected] QString QSqlTableModel::orderByClause() const

현재 설정된 정렬 순서에 따라 SQL ORDER BY 절을 반환합니다.

setSort() 및 selectStatement()도 참조하십시오 .

QSqlIndex QSqlTableModel::primaryKey() const

현재 테이블의 기본 키를 반환하거나, 테이블이 설정되지 않았거나 기본 키가 없는 경우 빈 QSqlIndex 를 반환합니다.

setTable(), setPrimaryKey(), QSqlDatabase::primaryIndex()도 참조하십시오 .

[protected] QSqlRecord QSqlTableModel::primaryValues(int row) const

row 에 지정된 값으로 기본 키 세트에 포함된 필드들이 설정된 레코드를 반환합니다. 기본 키가 정의되어 있지 않은 경우, 반환되는 레코드에는 모든 필드가 포함됩니다.

primaryKey()도 참조하십시오 .

[signal] void QSqlTableModel::primeInsert(int row, QSqlRecord &record)

이 신호는 현재 활성화된 데이터베이스 테이블의 지정된 row 에 삽입 작업이 시작될 때 insertRows()에 의해 발생합니다. record 매개변수는 참조형이므로 값을 할당할 수 있습니다(예: 일부 필드에 기본값을 채우거나 필드의 생성 플래그를 설정하는 경우). 이 신호를 처리하는 동안 setData()이나 setRecord()과 같은 다른 방법을 통해 레코드를 수정하려고 시도하지 마십시오.

QSqlRecord QSqlTableModel::record() const

이 함수는 오버로드된 함수입니다.

이 함수는 필드 이름만 포함된 빈 레코드를 반환합니다. 이 함수는 레코드의 필드 이름을 가져오는 데 사용할 수 있습니다.

setRecord() 및 QSqlRecord::isEmpty()도 참조하십시오 .

QSqlRecord QSqlTableModel::record(int row) const

모델 내의 row 에 해당하는 레코드를 반환합니다.

row 가 유효한 행의 인덱스인 경우, 해당 행의 값으로 레코드가 채워집니다.

모델이 초기화되지 않은 경우, 빈 레코드가 반환됩니다.

QSqlRecord::isEmpty()도 참조하십시오 .

[override virtual] bool QSqlTableModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())

QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent)를 재구현합니다.

parent 모델에서 인덱스 column 부터 시작하는 count 열을 제거합니다.

컬럼이 성공적으로 제거된 경우 true를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

removeRows()도 참조하십시오 .

[override virtual] bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())

QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent)를 재구현합니다.

row 부터 시작하는 count 행들을 제거합니다. 이 모델은 계층적 구조를 지원하지 않으므로, parent 는 유효하지 않은 모델 인덱스여야 합니다.

편집 전략이 OnManualSubmit 인 경우, 데이터베이스에서 행을 삭제하는 작업은 submitAll()가 호출될 때까지 지연됩니다.

OnFieldChange 및 OnRowChange 의 경우, 한 번에 하나의 행만 삭제할 수 있으며, 다른 행에 캐시된 변경 사항이 없는 경우에만 가능합니다. 삭제는 데이터베이스에 즉시 전송됩니다. 모델은 select()로 새로 고침될 때까지 성공적으로 삭제된 행에 대한 빈 행을 유지합니다.

삭제 실패 시, 해당 작업은 모델에서 되돌려지지 않습니다. 애플리케이션에서 다시 제출하거나 되돌릴 수 있습니다.

제거 대상 범위 내에 삽입되었으나 아직 성공적으로 제출되지 않은 행은 모델에서 즉시 제거됩니다.

데이터베이스에서 행이 삭제되기 전에 beforeDelete() 신호가 발생합니다.

row < 0이거나 row + count > rowCount()인 경우, 아무런 조치도 취하지 않고 false를 반환합니다. 모든 행을 제거할 수 있는 경우 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다. lastError()를 사용하여 자세한 데이터베이스 오류 정보를 가져올 수 있습니다.

removeColumns() 및 insertRows()도 참조하십시오 .

[override virtual slot] void QSqlTableModel::revert()

QAbstractItemModel::revert()을 재구현합니다.

사용자가 현재 행의 편집을 취소하면 항목 델리게이트에 의해 이 재구현된 슬롯이 호출됩니다.

모델의 전략이 ` OnRowChange ` 또는 ` OnFieldChange`로 설정된 경우 변경 사항을 되돌립니다. ` OnManualSubmit ` 전략의 경우 아무 작업도 수행하지 않습니다.

' revertAll()'을 사용하여 ' OnManualSubmit ' 전략에 대한 모든 보류 중인 변경 사항을 되돌리거나, ' revertRow()'을 사용하여 특정 행을 되돌릴 수 있습니다.

submit(), submitAll(), revertRow(), revertAll()도 참조하십시오 .

[slot] void QSqlTableModel::revertAll()

보류 중인 모든 변경 사항을 원상태로 되돌립니다.

revert(), revertRow(), submitAll()도 참조하십시오 .

[virtual] void QSqlTableModel::revertRow(int row)

지정된 row 에 대한 모든 변경 사항을 원상태로 되돌립니다.

revert(), revertAll(), submit() 및 submitAll()도 참조하십시오 .

[override virtual] int QSqlTableModel::rowCount(const QModelIndex &parent = QModelIndex()) const

QSqlQueryModel::rowCount(const QModelIndex &parent) const를 재구현합니다.

[virtual slot] bool QSqlTableModel::select()

setTable()를 통해 설정된 테이블의 데이터를 지정된 필터 및 정렬 조건을 적용하여 모델에 채우고, 성공 시 true 를 반환하며, 그렇지 않은 경우 false 를 반환합니다.

참고: select()를 호출하면 제출되지 않은 변경 사항이 모두 취소되고 삽입된 열이 모두 제거됩니다.

참조: setTable(), setFilter(), selectStatement().

[virtual slot] bool QSqlTableModel::selectRow(int row)

모델 내의 ` row `를, 데이터베이스 테이블의 기본 키 값과 일치하는 행의 값으로 갱신합니다. 기본 키가 없는 경우, 모든 열의 값이 일치해야 합니다. 일치하는 행이 발견되지 않으면 모델에는 빈 행이 표시됩니다.

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

select()도 참조하십시오 .

[virtual protected] QString QSqlTableModel::selectStatement() const

모델을 채우기 위해 내부적으로 사용되는 SQL ` SELECT ` 문을 반환합니다. 이 문에는 필터와 ` ORDER BY ` 절이 포함됩니다.

filter() 및 orderByClause()도 참조하십시오 .

[override virtual] bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role)를 재구현합니다.

role 역할에 해당하는 index 항목의 데이터를 value 로 설정합니다.

OnFieldChange 편집 전략의 경우, 다른 인덱스에 캐시된 변경 사항이 없는 경우에만 해당 인덱스가 변경 사항을 수신할 수 있습니다. 변경 사항은 즉시 제출됩니다. 그러나 데이터베이스에 아직 삽입되지 않은 행은 자유롭게 변경할 수 있으며 자동으로 제출되지는 않습니다. 제출된 변경 사항은 오류 발생 시 되돌려지지 않습니다.

OnRowChange 의 경우, 다른 행에 캐시된 변경 사항이 없는 경우에만 인덱스가 변경 사항을 수신할 수 있습니다. 변경 사항은 자동으로 제출되지 않습니다.

value 가 현재 값과 같을 경우 true 를 반환합니다. 그러나 해당 값은 데이터베이스에 제출되지 않습니다.

값을 설정할 수 있는 경우 true 을 반환하고, 오류(예: index 이 범위를 벗어난 경우)가 발생하면 false를 반환합니다.

역할이 Qt::EditRole 이 아닐 경우 false 을 반환합니다. EditRole 이외의 역할에 대한 데이터를 설정하려면 사용자 정의 프록시 모델을 사용하거나 QSqlTableModel 의 서브클래스를 생성하십시오.

editStrategy(), data(), submit(), submitAll() 및 revertRow()도 참조하십시오 .

[virtual] void QSqlTableModel::setEditStrategy(QSqlTableModel::EditStrategy strategy)

데이터베이스 내 값을 편집할 때의 전략을 ‘ strategy ’로 설정합니다.

이렇게 하면 보류 중인 변경 사항이 모두 취소됩니다.

editStrategy() 및 revertAll()도 참조하십시오 .

[virtual] void QSqlTableModel::setFilter(const QString &filter)

현재 필터를 ` filter`로 설정합니다.

필터는 ‘ WHERE ’ 키워드가 제외된 SQL WHERE 절입니다(예: name='Josephine')).

모델에 이미 데이터베이스에서 가져온 데이터가 채워져 있는 경우, 모델은 새로운 필터를 사용하여 데이터를 다시 선택합니다. 그렇지 않은 경우, 필터는 select()이 다음에 호출될 때 적용됩니다.

filter(), select(), selectStatement() 및 orderByClause()도 참조하십시오 .

[protected] void QSqlTableModel::setPrimaryKey(const QSqlIndex &key)

서브클래스가 key 의 기본 키를 설정할 수 있도록 허용하는 보호된 메서드입니다.

일반적으로 setTable()를 호출할 때마다 기본 인덱스가 자동으로 설정됩니다.

primaryKey() 및 QSqlDatabase::primaryIndex()도 참조하십시오 .

bool QSqlTableModel::setRecord(int row, const QSqlRecord &values)

모델의 ` row `에 ` values `을 적용합니다. 소스 및 대상 필드는 레코드 내 위치가 아닌 필드 이름에 따라 매핑됩니다.

values 에서 생성된 플래그는 데이터베이스로 변경 사항이 제출될 때 해당 필드가 사용되는지 여부를 결정하기 위해 유지된다는 점에 유의하십시오. 기본적으로 QSqlRecord 내의 모든 필드에 대해 true 로 설정되어 있습니다. values 의 어떤 값에 대해서도 변경 사항을 데이터베이스에 다시 저장하려면 setGenerated(false)을 사용하여 플래그를 false 로 설정해야 합니다.

OnFieldChange 및 OnRowChange 편집 전략의 경우, 다른 행에 캐시된 변경 사항이 없는 경우에만 해당 행에 변경 사항이 적용될 수 있습니다. 변경 사항은 즉시 제출됩니다. 제출된 변경 사항은 오류가 발생하더라도 되돌려지지 않습니다.

모든 값을 설정할 수 있는 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

record() 및 editStrategy()도 참조하십시오 .

[virtual] void QSqlTableModel::setSort(int column, Qt::SortOrder order)

column 의 정렬 순서를 order 로 설정합니다. 이는 현재 데이터에는 영향을 미치지 않으며, 새로운 정렬 순서를 적용하여 데이터를 새로 고치려면 select()를 호출하십시오.

sort(), select(), orderByClause()도 참조하십시오 .

[virtual] void QSqlTableModel::setTable(const QString &tableName)

모델이 작동하는 데이터베이스 테이블을 ` tableName`로 설정합니다. 테이블에서 데이터를 선택하지는 않지만, 해당 필드 정보를 가져옵니다.

테이블의 데이터로 모델을 채우려면 select()를 호출하십시오.

lastError()를 사용하여 오류 정보를 가져올 수 있습니다.

select(), setFilter(), lastError()도 참조하십시오 .

[override virtual] void QSqlTableModel::sort(int column, Qt::SortOrder order)

QAbstractItemModel::sort(int column, Qt::SortOrder order)를 재구현합니다.

order 를 정렬 순서로 사용하여 column 에 따라 데이터를 정렬합니다. 이 함수는 데이터를 즉시 선택하며, setSort()을 사용하여 모델에 데이터를 채우지 않고 정렬 순서를 설정합니다.

setSort(), select(), orderByClause()도 참조하십시오 .

[override virtual slot] bool QSqlTableModel::submit()

QAbstractItemModel::submit()을 재구현합니다.

사용자가 현재 행의 편집을 중단하면 항목 델리게이트에 의해 이 재구현된 슬롯이 호출됩니다.

모델의 전략이 OnRowChange 또는 OnFieldChange 로 설정된 경우, 현재 편집 중인 행을 제출합니다. OnManualSubmit 전략의 경우에는 아무 작업도 수행하지 않습니다.

' OnManualSubmit ' 전략의 경우, submitAll()을 사용하여 보류 중인 모든 변경 사항을 제출하십시오.

성공 시 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 자세한 오류 정보를 조회하려면 lastError()을 사용하십시오.

모델을 자동으로 다시 채우지 않습니다. 성공 시 제출된 행은 데이터베이스에서 새로 고쳐집니다.

revert(), revertRow(), submitAll(), revertAll() 및 lastError()도 참조하십시오 .

[slot] bool QSqlTableModel::submitAll()

보류 중인 모든 변경 사항을 제출하며, 성공 시 ` true `를 반환합니다. 오류 발생 시 ` false `를 반환하며, 자세한 오류 정보는 ` lastError()`를 통해 확인할 수 있습니다.

OnManualSubmit 에서 성공 시 모델이 다시 채워집니다. 해당 모델을 표시하는 모든 뷰에서는 선택 내용이 초기화됩니다.

참고: OnManualSubmit 모드에서는 submitAll()이 실패하더라도 이미 제출된 변경 사항이 캐시에서 지워지지 않습니다. 이를 통해 데이터를 잃지 않고 트랜잭션을 롤백한 후 다시 제출할 수 있습니다.

revertAll() 및 lastError()도 참조하십시오 .

QString QSqlTableModel::tableName() const

현재 선택된 테이블의 이름을 반환합니다.

[virtual protected] bool QSqlTableModel::updateRowInTable(int row, const QSqlRecord &values)

현재 활성화된 데이터베이스 테이블에서 주어진 ` row `을 지정된 ` values`으로 업데이트합니다. 성공하면 ` true `을 반환하고, 그렇지 않으면 ` false`을 반환합니다.

이 메서드는 데이터베이스에 직접 작용하는 저수준 메서드이므로 직접 호출해서는 안 됩니다. 값을 업데이트하려면 setData()을 사용하십시오. 데이터베이스를 수정할 시점은 모델의 편집 전략에 따라 결정됩니다.

generated-flag가 설정된 값만 업데이트된다는 점에 유의하십시오. generated-flag는 QSqlRecord::setGenerated()을 사용하여 설정할 수 있으며, QSqlRecord::isGenerated()을 사용하여 확인할 수 있습니다.

QSqlRecord::isGenerated() 및 setData()도 참조하십시오 .

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