私のプログラムには、sqlite データベースからのデータを表示する QTableView があります。私のプログラムはあまり多くないビデオ ファイルを並べ替えるために使用されるため、モデルの select メソッドを変更して、255 エントリ (デフォルト) ではなく、すべてのデータベースをメモリにロードしました。それはうまくいきますが:
個人用ヘッダーもあり、これをクリックして、変更日、名前、および投票でエントリを並べ替えることができます。何も変更しようとせずに、変更データでデータを並べ替えたことを認めましょう。それは機能し、すべてが並べ替えられます。ただし、セルを変更すると、たとえば名前が次のようになります。
- プログラムは 255 のエントリを読み込み、日付順に並べ替えてから表示します
- 255 の他のエントリを読み込み、日付で並べ替えてから表示します
- 等
変更後、データをデータごとに並べ替えてみると、すべて正常です。ただし、変更のたびに、プログラムは 255 エントリしかロードしません。基本的に、コールバック (何かを更新した後に呼び出されるもの) がありません。
ビューまたはモデルを修正する必要があるかどうかはわかりません。アイデアはありますか?
私のアプリでは、ビューのいくつかの機能を使用して修正できます。
column_sorted = self.tableau.horizontalHeader().sortIndicatorSection()
order = self.tableau.horizontalHeader().sortIndicatorOrder()
if column_sorted is not None:
self.tableau.sortByColumn(column_sorted, order)
else:
pass
しかし、私はより一般的な方法を好むでしょう。
これは、私のデータベースを変更するコードです。
def voter(self):
self.bdd.close()
liste.vote(self.current_video)
self.bdd.open()
self.modele.select()
しかし、データベースを変更するすべての関数で問題が発生します。QSortProxyFilter を使用していることを追加したいと思います。
self.proxy = QtGui.QSortFilterProxyModel()
self.proxy.setSourceModel(self.modele)
よくわからない場合は申し訳ありませんが、このバグを説明するのは難しく、アプリが大きくなり始めています (~3000 行)。