4

私はPyQtを使用していますが、私の質問は一般的なQtのものです:

関数 updateTable によって設定された QTableWidget があります。呼び出されると、DATASET からテーブルにデータを書き込みます。残念ながら、これにより、私の QTableWidget はすべてのセルに対して cellChanged() シグナルを発します。

シグナル cellChanged() は、変更されたセルの内容を読み取って DATASET に書き戻す関数 on_tableWidget_cellChanged に接続されています。これは、ユーザーが手動でデータを変更できるようにするために必要です。

したがって、テーブルが更新されるたびに、その内容が DATASET に書き戻されます。

セルがユーザーまたは updateTable によって変更されたかどうかを区別する方法はありますか?

一時的に updateTable で on_tableWidget_cellChanged を切断しようと思ったのですが、少し汚れているようです。

4

3 に答える 3

8

同様の状況で、私はちょうど使用しました

bool QObject::blockSignals ( bool block )
bool QObject::signalsBlocked () const

テーブルをセットアップする前にシグナルをブロックしてから、ブロックを解除します。

myTable.blockSignals(True)
#blah-blah..
myTable.blockSignals(False)
于 2010-03-23T14:01:51.857 に答える
1

少なくとも 4.6 では、これが QTableWidget の唯一のシグナルのようです。機能リクエストを投稿することもできますが、それが受け入れられるかどうかはわかりませんし、長い間待つかもしれません ;-)

セルが内部的に変更されたときに、QTableWidget のサブクラスを作成して、独自のシグナルを発行することもできます。

とにかく、特定の信号に接続できないため、セルの更新時に切断することはそれほど悪くありません。

于 2010-03-12T11:02:44.880 に答える
1

適切なモデルQTableWidgetの から に変更することをお勧めします。QTableViewとにかく、データを保持して配置するデータベースまたはその他のデータオブジェクトがあるので、うまくいけばかなり簡単に実行できます。setDataこれにより、編集 (モデルで呼び出される) と更新 (モデルで呼び出される)を区別できますdata

于 2010-03-15T18:02:24.330 に答える