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 は2番目の列(または列インデックス1)であるため、最後の行を次のように書き換えることができます:
int salary = model.data(model.index(4, 1)).toInt();このモデルはデフォルトで読み取り専用です。読み書き可能にするには、サブクラスを作成し、setData() およびflags() を再実装する必要があります。別の方法として、単一のデータベーステーブルに基づく読み書き可能なモデルを提供するQSqlTableModel を使用することもできます。
querymodelの例では、QSqlQueryModel を使用してクエリの結果を表示する方法を示しています。また、QSqlQueryModel をサブクラス化して、ユーザーに表示する前にデータの内容をカスタマイズする方法や、QSqlQueryModel に基づいて読み書き可能なモデルを作成する方法についても説明しています。
データベースがクエリで選択された行数を返さない場合、モデルは行を段階的に取得します。詳細については、fetchMore() を参照してください。
関連項目: QSqlTableModel 、QSqlRelationalTableModel 、QSqlQuery 、Model/Viewプログラミング、およびクエリモデルの例。
メンバ関数のドキュメント
[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 を再実装します。
指定された `role ` に対するヘッダーデータを、指定された `orientation` を持つヘッダーの `section ` 内に返します。
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
このモデルに関連付けられた constQSqlQuery オブジェクトへの参照を返します。
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 XML では、QSqlQueryModel に対して 1 つのロールのみが定義されています:
| 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()がfalseである必要があります。
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.