2016-05-02 20 views
1

QAbstractItemModelでいくつかの行を削除できません。QTableView + QAbstractItemModelでいくつかの行を削除します。

私の問題は、私はいくつかの行を選択した場合、行は私が選択した行をループ、その後1と3

言うことですし、それらを削除します。しかし、私は行1を削除した後、行3は行2になるので、実際には行4を削除します。ここで

は、選択した行を取得するために私の方法であり、ここで

def get_selected_rows(self): 
    view = self._view 
    selection = view.selectionModel() 
    return selection.selectedRows() 

は、特定の行を削除するための私の方法です:

def delete_obj(self, row): 
    self._model.removeRow(row.row()) 

そして、ここでは私のコントローラの私の方法であり、

def on_delete_clicked(self): 
    for selected_index in self._view.get_selected_rows(): 
     self._view.delete_obj(selected_index) 

ループの各繰り返しの後にすべてのインデックスを再計算しないようにする方法はありますか?

+0

アイテムのインデックスは、すぐにモデルが変更されたとして無効になります。削除したいアイテムがある場合はリストを取得してください(一定に保たれます)、ループの繰り返しごとにアイテムからインデックスを取得する方が良いでしょう。これは 'QStandardItem'と' QStandardItemModel'を使用している方が簡単です。 –

答えて

1

私はちょうど私のリストのreversedに反復、非常に簡単な解決策を見つけて、それは大丈夫です:)

def on_delete_clicked(self): 
    for selected_index in reversed(self._view.get_selected_rows()): 
     self._view.delete_obj(selected_index) 
+0

あなた自身の回答を受け入れることができます – mfitzp

関連する問題