QSqlQueryModel Class
QSqlQueryModel 클래스는 SQL 결과 집합을 위한 읽기 전용 데이터 모델을 제공합니다. 더 보기...
Header: | #include <QSqlQueryModel> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
qmake: | QT += sql |
상속합니다: | QAbstractTableModel |
상속 대상: |
- 상속된 멤버를 포함한 모든 멤버 목록
- 사용되지 않는 멤버
- QSqlQueryModel은 데이터베이스 클래스의 일부입니다.
공용 함수
QSqlQueryModel(QObject *parent = nullptr) | |
virtual | ~QSqlQueryModel() |
virtual void | clear() |
QSqlError | lastError() const |
const QSqlQuery & | query() const |
QSqlRecord | record(int row) const |
QSqlRecord | record() const |
(since 6.2) void | setQuery(QSqlQuery &&query) |
void | setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase()) |
재구현된 공용 함수
virtual bool | canFetchMore(const QModelIndex &parent = QModelIndex()) const override |
virtual int | columnCount(const QModelIndex &index = QModelIndex()) const override |
virtual QVariant | data(const QModelIndex &item, int role = Qt::DisplayRole) const override |
virtual void | fetchMore(const QModelIndex &parent = QModelIndex()) override |
virtual QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override |
virtual bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
virtual QHash<int, QByteArray> | roleNames() const override |
virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const override |
virtual bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override |
보호된 함수
virtual QModelIndex | indexInQuery(const QModelIndex &item) const |
virtual void | queryChange() |
void | setLastError(const QSqlError &error) |
상세 설명
QSqlQueryModel은 SQL 문을 실행하고 결과 집합을 트래버스하기 위한 상위 수준 인터페이스입니다. 이는 하위 수준 QSqlQuery 위에 구축되며 QTableView 과 같은 보기 클래스에 데이터를 제공하는 데 사용할 수 있습니다. 예를 들어
QSqlQueryModel *model = new QSqlQueryModel; model->setQuery("SELECT name, salary FROM employee"); model->setHeaderData(0, Qt::Horizontal, tr("Name")); model->setHeaderData(1, Qt::Horizontal, tr("Salary")); QTableView *view = new QTableView; view->setModel(model); view->show();
모델의 쿼리를 설정한 다음 뷰 헤더에 표시되는 레이블을 설정합니다.
뷰에 바인딩하지 않고 프로그래밍 방식으로 데이터베이스에 액세스하는 데에도 QSqlQueryModel을 사용할 수 있습니다:
QSqlQueryModel model; model.setQuery("SELECT name, salary FROM employee"); int salary = model.record(4).value("salary").toInt();
위의 코드 조각은 SELECT
쿼리의 결과 집합에 있는 레코드 4에서 salary
필드를 추출합니다. salary
은 두 번째 열(또는 열 인덱스 1)이므로 마지막 줄을 다음과 같이 다시 작성할 수 있습니다:
int salary = model.data(model.index(4, 1)).toInt();
이 모델은 기본적으로 읽기 전용입니다. 읽기-쓰기로 만들려면 이를 서브클래싱하고 setData() 및 flags()을 다시 구현해야 합니다. 또 다른 옵션은 단일 데이터베이스 테이블을 기반으로 읽기-쓰기 모델을 제공하는 QSqlTableModel 을 사용하는 것입니다.
쿼리 모델 예제는 QSqlQueryModel을 사용하여 쿼리 결과를 표시하는 방법을 보여줍니다. 또한 사용자에게 표시하기 전에 데이터의 내용을 사용자 지정하기 위해 QSqlQueryModel을 서브클래싱하는 방법과 QSqlQueryModel을 기반으로 읽기-쓰기 모델을 만드는 방법도 보여줍니다.
데이터베이스가 쿼리에서 선택한 행의 수를 반환하지 않는 경우 모델은 행을 증분적으로 가져옵니다. 자세한 내용은 fetchMore()를 참조하세요.
QSqlTableModel, QSqlRelationalTableModel, QSqlQuery, 모델/보기 프로그래밍 및 쿼리 모델 예제도참조하세요 .
멤버 함수 문서
[explicit]
QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)
주어진 parent 으로 빈 QSqlQueryModel을 생성합니다.
[virtual noexcept]
QSqlQueryModel::~QSqlQueryModel()
개체를 파괴하고 할당된 모든 리소스를 해제합니다.
clear()도 참조하세요 .
[override virtual]
bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const
재구현합니다: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.
데이터베이스에서 더 많은 행을 읽을 수 있는 경우 true
를 반환합니다. 이는 쿼리 크기를 보고하지 않는 데이터베이스에만 영향을 줍니다 ( QSqlDriver::hasFeature() 참조).
parent 는 항상 유효하지 않은 QModelIndex 이어야 합니다.
fetchMore()도 참조하세요 .
[virtual]
void QSqlQueryModel::clear()
모델을 지우고 획득한 모든 리소스를 해제합니다.
[override virtual]
int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const
재구현합니다: QAbstractItemModel::columnCount(const QModelIndex &parent) const.
[override virtual]
QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const
재구현합니다: QAbstractItemModel::data(const QModelIndex &index, int role) const.
지정된 item 및 role 의 값을 반환합니다.
item 이 범위를 벗어나거나 오류가 발생하면 유효하지 않은 QVariant 이 반환됩니다.
lastError()도 참조하세요 .
[override virtual]
void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())
재구현합니다: QAbstractItemModel::fetchMore(const QModelIndex &parent).
데이터베이스에서 더 많은 행을 가져옵니다. 쿼리 크기를 다시 보고하지 않는 데이터베이스에만 영향을 줍니다( QSqlDriver::hasFeature() 참조).
전체 결과 집합을 강제로 가져오려면 다음을 사용할 수 있습니다:
while (myModel->canFetchMore()) myModel->fetchMore();
parent 는 항상 유효하지 않은 QModelIndex 이어야 합니다.
canFetchMore()도 참조하세요 .
[override virtual]
QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
재구현합니다: QAbstractItemModel::headerData(int section, Qt::오리엔테이션 오리엔테이션, int role) const.
지정된 section 헤더의 지정된 orientation 에 있는 지정된 role 의 헤더 데이터를 리턴합니다.
setHeaderData()도 참조하십시오 .
[virtual protected]
QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const
모델에서 주어진 item 에 대한 데이터베이스 결과 집합에서 값의 인덱스를 반환합니다.
열이나 행이 삽입, 제거 또는 이동되지 않은 경우 반환 값은 item 와 동일합니다.
item 이 범위를 벗어나거나 item 이 결과 집합의 값을 가리키지 않는 경우 잘못된 모델 인덱스를 반환합니다.
QSqlTableModel::indexInQuery(), insertColumns() 및 removeColumns()도 참조하세요 .
[override virtual]
bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
재구현합니다: QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).
column 위치에 count 열을 모델에 삽입합니다. parent 매개변수는 모델이 부모-자식 관계를 지원하지 않으므로 항상 유효하지 않은 QModelIndex 이어야 합니다.
column 이 범위 내에 있으면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
기본적으로 삽입된 열은 비어 있습니다. 데이터로 채우려면 data()를 다시 구현하고 삽입된 열을 개별적으로 처리합니다:
QVariant MyModel::data(const QModelIndex &item, int role) const { if (item.column() == m_specialColumnNo) { // handle column separately } return QSqlQueryModel::data(item, role); }
removeColumns()도 참조하세요 .
QSqlError QSqlQueryModel::lastError() const
데이터베이스에서 마지막으로 발생한 오류에 대한 정보를 반환합니다.
setLastError() 및 query()도 참조하세요 .
const QSqlQuery &QSqlQueryModel::query() const
이 모델과 연관된 QSqlQuery 객체에 대한 참조를 반환합니다.
setQuery()도 참조하세요 .
[virtual protected]
void QSqlQueryModel::queryChange()
이 가상 함수는 쿼리가 변경될 때마다 호출됩니다. 기본 구현은 아무 작업도 수행하지 않습니다.
query()는 새 쿼리를 반환합니다.
QSqlRecord QSqlQueryModel::record(int row) const
현재 쿼리의 필드에 대한 정보가 포함된 레코드를 반환합니다. row 이 유효한 행의 인덱스인 경우 레코드가 해당 행의 값으로 채워집니다.
모델이 초기화되지 않은 경우 빈 레코드가 반환됩니다.
QSqlRecord::isEmpty()도 참조하세요 .
QSqlRecord QSqlQueryModel::record() const
이 함수는 오버로드된 함수입니다.
현재 쿼리의 필드에 대한 정보가 포함된 빈 레코드를 반환합니다.
모델이 초기화되지 않은 경우 빈 레코드가 반환됩니다.
QSqlRecord::isEmpty()도 참조하세요 .
[override virtual]
bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
재구현합니다: QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).
column 위치부터 시작하는 모델에서 count 열을 제거합니다. parent 매개변수는 모델이 부모-자식 관계를 지원하지 않으므로 항상 유효하지 않은 QModelIndex 이어야 합니다.
열을 제거하면 열이 효과적으로 숨겨집니다. 기본 QSqlQuery 에는 영향을 주지 않습니다.
열이 제거된 경우 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
[override virtual]
QHash<int, QByteArray> QSqlQueryModel::roleNames() const
재구현합니다: QAbstractItemModel::roleNames() const.
모델의 역할 이름을 반환합니다.
Qt는 QSqlQueryModel 에 대해 하나의 역할만 정의합니다:
Qt 역할 | QML 역할 이름 |
---|---|
Qt::DisplayRole | display |
[override virtual]
int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex()) const
재구현합니다: QAbstractItemModel::rowCount(const QModelIndex &parent) const.
데이터베이스가 쿼리 크기 반환을 지원하는 경우( QSqlDriver::hasFeature() 참조), 현재 쿼리의 행 수가 반환됩니다. 그렇지 않으면, 현재 클라이언트에 캐시된 행 수를 반환합니다.
parent 는 항상 유효하지 않은 QModelIndex 이어야 합니다.
canFetchMore() 및 QSqlDriver::hasFeature()도 참조하세요 .
[override virtual]
bool QSqlQueryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
재구현합니다: QAbstractItemModel::setHeaderData(int section, Qt::Orientation 방향, const QVariant &value, int role).
지정된 role 의 가로 헤더 캡션을 value 로 설정합니다. 이 함수는 뷰에 데이터를 표시하는 데 모델을 사용하는 경우 유용합니다(예: QTableView).
orientation 이 Qt::Horizontal 이고 section 이 유효한 섹션을 참조하는 경우 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
이 함수는 모델이 읽기 전용이므로 데이터베이스의 값을 수정하는 데 사용할 수 없습니다.
headerData() 및 data()도 참조하세요 .
[protected]
void QSqlQueryModel::setLastError(const QSqlError &error)
파생 클래스가 데이터베이스에서 발생한 마지막 오류의 값을 error 로 설정할 수 있도록 하는 보호된 함수입니다.
lastError()도 참조하세요 .
[since 6.2]
void QSqlQueryModel::setQuery(QSqlQuery &&query)
모델을 재설정하고 데이터 공급자를 지정된 query 으로 설정합니다. 쿼리는 활성 상태여야 하며 isForwardOnly()가 아니어야 한다는 점에 유의하세요.
lastError()는 쿼리 설정에 오류가 있는 경우 자세한 정보를 검색하는 데 사용할 수 있습니다.
참고: setQuery()를 호출하면 삽입된 모든 열이 제거됩니다.
이 함수는 Qt 6.2에 도입되었습니다.
query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly() 및 lastError()도 참조하세요 .
void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())
과부하가 걸린 기능입니다.
지정된 데이터베이스 연결 db 에 대해 query 쿼리를 실행합니다. 지정한 데이터베이스가 없거나 잘못된 데이터베이스가 있으면 기본 연결이 사용됩니다.
lastError()는 쿼리 설정에 오류가 있는 경우 자세한 정보를 검색하는 데 사용할 수 있습니다.
예시:
QSqlQueryModel model; model.setQuery("select * from MyTable");if (model.lastError().isValid()) qDebug() << model.lastError();
query(), queryChange() 및 lastError()도 참조하세요 .
© 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.