Qtサンプル操作データベースQSqlTableModel
Qt Example Operation Database Qsqltablemodel
この記事では、QtデータベースインスタンスのQSqlTableModel操作について説明します。詳しくは内容をご覧ください。また、この記事に関係なく、コンテンツの収束には記事のコンテンツへのリンクもあります。
QtデータベースQSqlTableModelインスタンス操作はこの記事で説明されているコンテンツです。コンテンツを見てみましょう。前回の記事では、読み取り専用のQSqlQueryModelでも編集可能にすることができますが、多くの問題が発生します。 Qtは単一のQSqlTableModel操作テーブルを提供します。テーブルの内容を変更する必要がある場合は、このクラスを直接使用できます。
関連記事:
Qtサンプル操作データベースQSqlQueryModelパート
Qt次のサンプル操作データベースQSqlQueryModel
QSqlTableModel、クラスは、SQLテーブルモデルを編集できる単一の読み取り/書き込みデータを提供します。ここでは、それらの一般的な機能のいくつか、つまり、変更、挿入、削除、クエリ、および並べ替えについて紹介します。
話し始める前に、新しいQt4 GUIアプリケーションプロジェクト(ここではtableModelと呼ばれる私のプロジェクト)を作成し、QtSqlモジュール、基本クラスの選択QWidgetを選択します。プロジェクトが完了したら、database.hという名前のC ++ヘッダーファイルを追加し、次のように変更します。
- #ifndef DATABASE_H
- #define DATABASE_H
- #include
- #include
- #include
- static bool createConnection()
- {{
- QSqlDatabase db = QSqlDatabase :: addDatabase(“ QSQLITE”)
- db.setDatabaseName(“ database.db”)
- if(!db.open())はfalseを返します
- QSqlQueryクエリ
- query.exec(QObject :: tr(“ create table student(id int primary key、name vchar)”))
- query.exec(QObject :: tr( '学生の値に挿入(0、' Liu ')'))
- query.exec(QObject :: tr( '学生の値に挿入(1、'ギャング ')'))
- query.exec(QObject :: tr( '学生の値に挿入(2、' WANG ')'))
- trueを返す
- }
- #endif // DATABASE_H
データベースで中国語を使用するために、tr QObjectクラス()関数を使用しました。次のmain()関数では、中国語をサポートするための適切なコードも追加する必要があります。
次に、main.cppファイルが次のように変更されます。
- #include
- #include“ widget.h”
- #include“ database.h”
- #include
- int main(int argc、char * argv [])
- {{
- QApplication a(argc、argv)
- QTextCodec :: setCodecForTr(QTextCodec :: codecForLocale())
- if(!createConnection())
- 戻り値1
- ウィジェットw
- w.show()
- a.exec()を返す
- }
ここでwidget.uiを開きます。デザインインターフェイスは次のとおりです。
メンバーが持っているテーブルビューライン編集では、残りのメンバーはいくつかのボタンです。
次に、Widget.hがヘッダーファイルに追加されます:#include
プライベートオブジェクトで宣言:QSqlTableModel *モデル
別の関数でオブジェクトモデルを使用したいので、ここで宣言します。
ウィジェット.cppをファイルコンストラクターに追加して、次のコードを追加します。
- モデル=新しいQSqlTableModel(this)
- model-> setTable( 'student')
- model-> setEditStrategy(QSqlTableModel :: OnManualSubmit)
- model-> select()//テーブル全体のすべての行を選択します
- // model-> removeColumn(1)//列名属性を表示しません。記録時間が追加された場合、プロパティの追加値はオンになりません
- ui-> tableView-> setModel(model)
- // ui-> tableView-> setEditTriggers(QAbstractItemView :: NoEditTriggers)//編集できません
この場合、プログラムが実行され、効果は次のようになります。
ご覧のとおり、このモデルはSQLステートメントから完全に外れています。select()関数を実行するだけで、テーブル全体を検索できます。上記の2行のコードはコメント化されており、コメントを解除して、その効果をテストできます。
まず、変更操作。
1.「編集の送信」ボタンクリックイベントスロット機能に入り、次のように変更します。
- void Widget :: on_pushButton_clicked()//変更をコミットします
- {{
- モデル->データベース()トランザクション()。 //トランザクション操作を開始します
- if(model-> submitAll()){
- モデル->データベース()コミット()。 // 参加する
- } そうしないと {
- モデル->データベース()ロールバック()。 //ロールバック
- QMessageBox :: warning(this、tr(“ tableModel”)、
- tr( 'データベースエラー:%1')
- .arg(model-> lastError()。text()))
- }
- }
ここで使用されるトランザクション操作は、実際にコミット操作はmodel-> submitAll()oneであり、すべての変更をコミットします。
2、「変更を元に戻す」ボタンをクリックしてイベントスロット機能に入ると、変更は次のとおりです。
- void Widget :: on_pushButton_2_clicked()//変更を元に戻す
- {{
- モデル-> revertAll()
- }
単純なコード行です。
widget.cppファイルにヘッダーファイルを追加する必要があります。
- #include
- #include
この場合、プログラムが実行され、効果は次のようになります。
「Gang」から「LiQiang」に移動します。「undochanges」をクリックすると、「Chen Gang」が再度読み取られ、「Submit modify」をクリックするとデータベースに保存され、「undo」をクリックします。修正の変更は返されません。
ご覧のとおり、このモデルはモデルへのすべての変更を保存できますが、変更をコミットした場合にのみ、実際にデータベースに書き込まれます。もちろん、これは、保存戦略の最初に設定したためです。
- model-> setEditStrategy(QSqlTableModel :: OnManualSubmit)
OnManualSubmitは、変更をコミットして有効にすることを示しています。
次に、クエリ操作。
1.「検索」ボタンを入力します。クリックイベントスロット機能は次のように変更されます。
- void Widget :: on_pushButton_7_clicked()//クエリ
- {{
- QString名= ui-> lineEdit-> text()
- model-> setFilter(QObject :: tr( 'name ='%1 '')arg(name)。)//名前によるスクリーニング
- model-> select()//結果を表示する
- }
setFilter()関数のキーワードフィルタリングを使用します。この関数は、クエリ結果セット全体に対して実行されます。変数を使用するために、tr QObjectクラス()関数を使用しました。
2.「完全なフォームに戻る」ボタンを入力します。クリックイベントスロット機能は次のように変更されます。
- void Widget :: on_pushButton_8_clicked()//完全なテーブルに戻る
- {{
- model-> setTable( 'student')//再関連付けテーブル
- model-> select()//テーブル全体の内容を再度表示する
- }
テーブル全体の内容を再度表示するには、テーブルを再度リンクする必要があります。
経営成績は以下のとおりです。
名前を入力し、「検索」ボタンをクリックすると、レコードを表示できます。次に、「完全なフォームに戻る」ボタンをクリックします。
第三に、ソート操作。
「IDの昇順」に入り、「イベントスロット機能」をクリックして「IDの降順」ボタンをクリックします。変更点は次のとおりです。
- void Widget :: on_pushButton_5_clicked()//昇順
- {{
- model-> setSort(0、Qt :: AscendingOrder)// id属性、つまり0番目の列(昇順)
- モデル-> select()
- }
- void Widget :: on_pushButton_6_clicked()//降順
- {{
- model-> setSort(0、Qt :: DescendingOrder)
- モデル-> select()
- }
ここではsetSort()関数を使用して並べ替えました。2つのパラメーターがあります。最初のパラメーターは左から右へのいくつかの並べ替え属性ヘッダーの最初のパラメーターを表し、左端は0番目のプロパティで、これはid属性です。 2番目のパラメータはソート方法で、昇順と降順の2種類があります。
プログラムを実行すると、効果は次のようになります。
これは、エフェクトの後に「IDによる降順」ボタンを押すことです。
第四に、削除操作。
「選択した行を削除」ボタンクリックイベントスロット機能を入力し、次の変更を加えます。
- void Widget :: on_pushButton_4_clicked()//現在の行を削除します
- {{
- int curRow = ui-> tableView-> currentIndex()。row()
- //選択した行を取得します
- モデル-> removeRow(curRow)
- //行を削除します
- int ok = QMessageBox ::警告(this、tr( '現在の行を削除してください!')、tr( 'よろしいですか'
- '現在の行をまだ削除しますか?')、
- QMessageBox :: Yes、QMessageBox :: No)
- if(ok == QMessageBox :: No)
- {{
- model-> revertAll()//削除されていない場合、失効
- }
- else model-> submitAll()//それ以外の場合は送信し、データベースの行を削除します
- }
関数が実際にデータベース内の行を削除した後にsubmitAll()を実行すると、最初のモデルに格納されている行が削除されます。ここでは、アラートボックスを使用して、ユーザーが実際に行を削除するかどうかを選択できるようにします。
経営成績は以下のとおりです。
2番目の行をクリックしてから、警告ボックスである[選択した行を削除]ボタンをクリックします。次に、テーブルの2行目の前に、行が変更されたことを示す小さな感嘆符がありましたが、データにダーティデータ(ダーティデータ)と呼ばれる学校がある場合、データベースに実際の変更はありません。 。 「はい」ボタンを押すとデータベース内のデータが削除され、「いいえ」を押すと変更がキャンセルされます。
第五に、挿入操作。
「レコードの追加」ボタンを入力すると、クリックイベントスロット機能が次のように変更されます。
- void Widget :: on_pushButton_3_clicked()//レコードを挿入
- {{
- int rowNum = model-> rowCount()//テーブルの行数を取得します
- int id = 10
- model-> insertRow(rowNum)//行を追加します
- model-> setData(model-> index(rowNum、0)、id)
- //モデル-> submitAll()//直接送信できます
- }
学生ID番号にテーブルを設定することが主キーであるため、最後の行にテーブルを追加します。したがって、id属性を追加するために新しい行を追加するには、値setData関数が必要です。そうでない場合、行の追加は成功しません。ここでは、submitAll()関数を直接呼び出して送信できます。また、[送信変更]ボタンを使用して送信することもできます。
プログラムを実行すると、効果は次のようになります。
[レコードの追加]ボタンを押した後、行を追加しますが、行の前にアスタリスクがあります。[変更の送信]ボタンを押すと、アスタリスクが消えます。もちろん、削除された上記のコード関数についてコメントを送信すると、スター番号が表示されます。
このモデルは非常に強力であり、SQLステートメントから完全に外れていることがわかります。データベースについてあまり詳しくない場合でも、ほとんどの一般的な操作に使用できます。これまで見てきたように、このモデルはバッファを提供します。最初に保存されたものを変更できます。関数をコミットするときに、実際にデータベースを変更します。もちろん、このモデルは以前のモデルよりも高度であり、すべての操作の前で話すと、ここで実行できます。
この記事はwww.yafeilinux.comで作成されました
概要:QtコンテンツデータベースQSqlTableModel操作の紹介の例は終わりました。この記事をお読みいただければ幸いです。農業と学習に関する情報は、エディターズチョイスを参照してください。