1

カスタマイズされた qtablemodel と qtableview があります。ユーザーが複数の行を選択し、この行内の値の 1 つを変更できる機能を追加したいと思います。彼は実際にすべての行でこの値を変更します。たとえば、テーブル全体を選択したときに、テーブル内のすべての人物の名前をアリスに変更できます。

これを達成するのを手伝ってもらえますか?

モデルの setData を異なる行に対して複数回トリガーする方法がわかりません。または、モデル内の setData 関数が呼び出される前に、qtableview がモデルに送信するシグナルを教えていただけますか?

事前にどうもありがとうドニー

4

3 に答える 3

3

同じ列で選択したすべての値を同時に編集するという問題については、もう少し簡単な解決策があるかもしれません。QTableView :: edit()をオーバーライドする代わりに、ユーザーが編集を送信した後に呼び出されるQTableView :: commitData(editor)をオーバーライドする方が簡単です。

つまり、ユーザーが編集を送信すると、選択した他のすべての行を繰り返し処理し、編集したセルと同じ列のセルにまったく同じ値の変更を適用します。

Pythonの例を次に示します。C++への変換は簡単です(どこにでもセミコロンを追加selfし、に置き換えますthis):

class ImageTableView(QtGui.QTableView):
    def commitData(self, editor):
        # call parent commitData first
        super(ImageTableView, self).commitData(editor)

        # self.currentIndex() is the QModelIndex of the cell just edited
        theModel = self.currentIndex().model()
        # get the value that the user just submitted
        value = theModel.data(self.currentIndex(), QtCore.Qt.EditRole)

        curRow, curCol = self.currentIndex().row(), self.currentIndex().column()

        # selection is a list of QItemSelectionRange instances
        for isr in self.selectionModel().selection():
            rows = range(isr.top(), isr.bottom()+1)
            for row in rows:
                if row != curRow:
                    # row,curCol is also in the selection. make an index:
                    idx = theModel.index(row, curCol)
                    # so we can apply the same value change
                    theModel.setData(idx, value, QtCore.Qt.EditRole)
于 2013-03-21T14:51:56.923 に答える
0

QTableView::selectedIndexes() から QModelList を取得して、それを繰り返すことはできませんか?

于 2013-02-01T00:11:51.557 に答える