1

これはこのフォーラムへの私の最初の投稿であり、私が解決を求めている問題が明確に説明されていることを願っています。DBのテーブルを表示するためにQSqlTableModelとQSqlTableViewを使用しています。キャッシュされたテーブル モデルは私が探していたものです。そのため、QSqlTableModel を選択しました (他のモデルはありますか?)。submitAll() を実行したら、キャッシュされたすべてのクエリを xml に解析する必要があります。編集戦略として OnManualSubmit を選択しました。QSqlTableModel のサブクラスを作成し、insertRowInTable/updateRowInTable/deleteRowFromTable をオーバーロードしようとしましたが、キャッシュはプライベート クラスへの d ポインターによってアクセスされ、キャッシュされた準備済みステートメントを取得して xml に解析する別の方法が見つかりません。 . 私が考えたこの解決策は不可能ですか?

返信をお待ちしております。

4

1 に答える 1

0

QSqlTableModel は、パブリックを持つ QSqlQueyModel を継承します。

QSqlQuery QSqlQueryModel::query () const

QSqlTableModel が発行する 4 つの変更シグナルに接続できます。

void    beforeDelete ( int row )
void    beforeInsert ( QSqlRecord & record )
void    beforeUpdate ( int row, QSqlRecord & record )
void    primeInsert ( int row, QSqlRecord & record )

(問題: 同じイベントに対して primeInsert と BeforeInsert を発行できると思いますが、よくわかりません)

サブクラス化して submit() を再実装し、親 submit を呼び出す前に QSqlQuery を含むシグナルを発行します。

bool YourChildModel::submit ()
 {
    emit yourSignal(query());
    return QSqlTableModel::submit()
 }

QsqlQueryには

QString QSqlQuery::lastQuery () const
Returns the text of the current query being used, or an empty string if there is no current query text.

QString QSqlQuery::executedQuery () const
Returns the last query that was successfully executed.
In most cases this function returns the same string as lastQuery(). If a prepared query with placeholders is executed on a DBMS that does not support it, the preparation of this query is emulated. The placeholders in the original query are replaced with their bound values to form a new query. This function returns the modified query. It is mostly useful for debugging purposes.

これはxmlに解析するのに役立ちます。

于 2012-12-11T11:15:58.287 に答える