Qt Quick ビューでのSQLデータベースの使用
SQLモデル
Qt SQL には、SQL データモデルをサポートする C++ クラスが用意されています。これらのクラスは、基盤となる SQL データに対して透過的に動作するため、作成、挿入、更新といった基本的な SQL 操作を行う際に SQL クエリを実行する必要が軽減されます。これらのクラスの詳細については、「SQL モデルクラスの使用」を参照してください。
C++ クラスは SQL データを操作するための完全な機能セットを提供しますが、QML へのデータアクセス機能は提供しません。そのため、これらのクラスのいずれかのサブクラスとして C++ カスタムデータモデルを実装し、それを型またはコンテキストプロパティとして QML に公開する必要があります。
読み取り専用データモデル
QML からデータへの読み取り専用アクセスを可能にするには、カスタムモデルで以下のメソッドを再実装する必要があります:
- roleNames() を呼び出して、ロール名を QML フロントエンドに公開します。たとえば、次のバージョンは、選択されたテーブルのフィールド名をロール名として返します:
QHash<int, QByteArray> SqlQueryModel::roleNames() const { QHash<int, QByteArray> roles; // record() returns an empty QSqlRecord for (int i = 0; i < this->record().count(); i ++) { roles.insert(Qt::UserRole + i + 1, record().fieldName(i).toUtf8()); } return roles; } - data():SQLデータをQMLフロントエンドに公開します。たとえば、以下の実装は、指定されたモデルインデックスに対応するデータを返します:
QVariant SqlQueryModel::data(const QModelIndex &index, int role) const { QVariant value; if (index.isValid()) { if (role < Qt::UserRole) { value = QSqlQueryModel::data(index, role); } else { int columnIdx = role - Qt::UserRole - 1; QModelIndex modelIndex = this->index(index.row(), columnIdx); value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole); } } return value; }
QSqlQueryModel クラスは、SQLデータベース内のデータを表すカスタム読み取り専用モデルを実装するのに十分です。チャットチュートリアルの例では、SQLiteデータベースから連絡先情報を取得するカスタムモデルを実装することで、これを非常によく示しています。
編集可能なデータモデル
QSqlTableModel は、単一のデータベーステーブルに対して編集可能なデータモデルを提供し、「モデル/ビュープログラミングの概要」ドキュメントに記載されているとおりに setData() を実装しています。
モデルで使用されるEditStrategy に応じて、変更内容は後で送信されるようキューに入れられるか、または即座に送信されます。
また、QSqlTableModel::insertRecord() を呼び出すことで、モデルに新しいデータを挿入することもできます。以下のコードスニペットでは、QSqlRecord に書籍の詳細が設定され、モデルに追加されています:
...
QSqlRecord newRecord = record();
newRecord.setValue("author", "John Grisham");
newRecord.setValue("booktitle", "The Litigators");
insertRecord(rowCount(), newRecord);
...© 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.