ボタンをクリックしたときに、選択した行をテーブルから削除したいdelete
。
しかし、Qt のドキュメントで行の削除に関するものは見つかりません。何か案は?
ボタンをクリックしたときに、選択した行をテーブルから削除したいdelete
。
しかし、Qt のドキュメントで行の削除に関するものは見つかりません。何か案は?
You can use the bool QAbstractItemModel::removeRow(int row, const QModelIndex & parent = QModelIndex())
functionality for this.
Here you can find an example for all this.
Also, here is an inline quote from that documentation:
removeRows()
Used to remove rows and the items of data they contain from all types of model. Implementations must call beginRemoveRows() before inserting new columns into any underlying data structures, and call endRemoveRows() immediately afterwards.
The second part of the task would be to connect the button's clicked signal to the slot executing the removal for you.
複数の行を削除する場合、removeRow()
呼び出しを使用すると、いくつかの問題が発生する可能性があります。これは行インデックスで動作するため、行を削除するときに行インデックスがシフトしないように、行を下から上に削除する必要があります。これは私が PyQt で行った方法です。C++ はわかりませんが、非常に似ていると思います。
rows = set()
for index in self.table.selectedIndexes():
rows.add(index.row())
for row in sorted(rows, reverse=True):
self.table.removeRow(row)
私にとって完璧に機能します!ただし、知っておくべきことが 1 つあります。私の場合、ユーザーが特定のセル (「X」の付いたプッシュボタン) をクリックすると、この関数が呼び出されます。残念ながら、そのプッシュボタンをクリックすると行が選択解除され、削除されなくなります。これを修正するために、送信者の行をキャプチャして、最初の「for ループ」の前の「remove_list」に追加しました。それは次のようになります。
rows.add(self.table.indexAt(self.sender().pos()).row())