QSqlQueryModel Class
QSqlQueryModel 클래스는 SQL 결과 집합을 위한 읽기 전용 데이터 모델을 제공합니다. 더 보기...
| 헤더: | #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.9) void | refresh() |
(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 를 사용하는 것입니다.
querymodel 예제는 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::Orientation orientation, int role) const를 재구현합니다.
지정된 orientation 를 가진 헤더의 section 에서 주어진 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
이 모델과 연관된 const QSqlQuery 객체에 대한 참조를 반환합니다.
setQuery()도 참조하십시오 .
[virtual protected] void QSqlQueryModel::queryChange()
이 가상 함수는 쿼리가 변경될 때마다 호출됩니다. 기본 구현은 아무 작업도 수행하지 않습니다.
query()는 새로운 쿼리를 반환합니다.
query() 및 setQuery()도 참조하십시오 .
QSqlRecord QSqlQueryModel::record(int row) const
현재 쿼리의 필드에 대한 정보가 포함된 레코드를 반환합니다. ` row `가 유효한 행의 인덱스인 경우, 해당 행의 값으로 레코드가 채워집니다.
모델이 초기화되지 않은 경우, 빈 레코드가 반환됩니다.
QSqlRecord::isEmpty()도 참조하십시오 .
QSqlRecord QSqlQueryModel::record() const
현재 쿼리의 필드에 대한 정보가 포함된 빈 레코드를 반환합니다.
모델이 초기화되지 않은 경우, 빈 레코드가 반환됩니다.
이 함수는 오버로드된 함수입니다.
QSqlRecord::isEmpty()도 참조하십시오 .
[since 6.9] void QSqlQueryModel::refresh()
현재 쿼리를 다시 실행하여 동일한 데이터베이스 연결에서 데이터를 가져옵니다.
참고: 쿼리에 바인딩된 값이 포함된 경우` refresh() `을 사용할 수 없습니다.
이 함수는 Qt 6.9에서 도입되었습니다.
setQuery(QSqlQuery &&query) 및 QSqlQuery::boundValue()도 참조하십시오 .
[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 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()도 참조하십시오 .
© 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.