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.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 Programming, およびQuery Model Exampleも参照して ください。
メンバ関数のドキュメント
[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
このモデルに関連付けられた 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()も参照してください 。
[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 に対して1つのロールのみを定義しています:
Qtロール | QMLロール名 |
---|---|
Qt::DisplayRole | 表示 |
[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() を使用すると、クエリの設定にエラーがあった場合に冗長な情報を取得できます。
例
QSqlQueryModelmodel; 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.