2

QTableViewがあります。を使用してデータベースからデータをクエリしていますQtSql.QSqlQuery

SQL = 'SELECT * FROM table1'
Query = QtSql.QSqlQuery(database)
Query.prepare(SQL)
Query.exec_()

model = QtSql.QSqlTableModel()
model.setTable('Table')
model.setQuery(Query)

proxy = QtGui.QSortFilterProxyModel()
proxy.setSourceModel(model)

QTableView.setModel(proxy)

すべてが機能しているファイルで、クエリ結果がに表示されますQTableView。私の問題は、SQL 結果が0レコードを返すようにステートメントを変更Queryすると、データとセルのデータをクリアする必要があることです。QTableView

QTableView.clear()空の行と列を残してセル内のデータをクリアすることを使用してみました。QTAbleViewどうすれば完全にクリアできますか

4

3 に答える 3

3

データのクリアに関する私の研究はうまくいきました。

使用しましたproxy.deleteLater()

同じ状況に遭遇した誰かが恩恵を受けることができることを願っています

于 2013-03-25T12:07:35.047 に答える
3

C ++には、QAbstractItemViewのリセット関数があります。あなたは言えた

yourTableView.reset();

于 2016-06-24T09:41:44.043 に答える
1

この状況で私が好むのは、QTableViewの制限のため、少し回避策です。

私自身の個人的なプログラムでは、代わりにQTableViewの行と列を非表示にして、デフォルトで空白に設定されているように見せることにしました。これは、ウィジェットを削除した場合、ウィジェットを置き換える必要があり、これによりオブジェクトのすべてのプロパティもリセットされるためです。これにより、理論的には、QTableViewを空白またはクリアとして表示する必要があるたびに、QTableViewのすべてのプロパティを再割り当てする必要が生じる可能性があります。ウィジェットを削除する代わりに、この提案されたオプションは2つの単純なループで実行でき、テーブルを更新して値を再度表示したい場合は、2つの単純なループで作業が完了します。

QTableViewにデータを入力する方法は複数ありますが、どちらを使用する場合でも、テーブルの行と列を繰り返す必要があります。以下は、QtCore.QAbstractTableModelから継承するクラスに基づいて使用するメソッドです。これにより、呼び出すdataFrameと、QTableViewデータのパンダデータフレームが返されます。

テーブルを非表示にする必要がある場合:

for _row in range(len(yourQTableView.model().dataFrame.index)):
    yourQTableView.hideRow(_row)

for _col, col_name in enumerate(yourQTableView.model().dataFrame.columns):
    yourQTableView.hideColumn(_col)

表を表示する必要がある場合:

for _row in range(len(yourQTableView.model().dataFrame.index)):
    yourQTableView.showRow(_row)

for _col, col_name in enumerate(yourQTableView.model().dataFrame.columns):
    yourQTableView.showColumn(_col)

私にとって、これは最も簡単な方法であり、私が望む結果を得ることができます。ウィジェットを完全に削除するよりもこの方法が好まれない理由は考えられません。

于 2021-04-30T21:28:31.277 に答える