0

次のようにテーブルとボタンを作成します。

self.table = QtGui.QTableWidget()
self.table.setObjectName('table')
self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.table.setDragDropMode(False)
self.verticalLayout.addWidget(self.table)

self.btn_del = QtGui.QPushButton(self)
self.btn_del.setObjectName('btn_del')
self.btn_del.setEnabled(False)

QtCore.QObject.connect(self.btn_del, QtCore.SIGNAL('clicked()'), self.del_feat)

ユーザーがテーブル内の行をマークしてボタンをクリックすると、選択した行が色付けされます。したがって、私はこれを使用します:

def del_feat(self):

    del_list = []
    for i in self.table.selectionModel().selectedRows():
        del_list.append(i.row())


    col = len(self.columns) 


    brush_gray = QtGui.QBrush(QtGui.QColor(232,232,232))
    brush_gray.setStyle(QtCore.Qt.SolidPattern)

    for r in del_list[:]:
        for i in range(col):
            self.ui_c.table.item(r,i).setBackground(brush_gray)

色付けは機能していますが、どういうわけか、この色付け方法を使用すると、行を選択するためにクリックされたセルの値が、マウスが置かれた最後のセルに書き込まれます。セルが色付けされず、選択されているだけの場合、何も起こりません。で試してみましたsetDragDropMode(False)が、効果がありません。この問題を解決する方法はありますか?

ティア・マーティン

4

1 に答える 1

0

cellChanged 信号を切断して (使用している場合)、再度接続するよりも、うまくいきました... 次のように:

self.disconnect(self.table, QtCore.SIGNAL("cellChanged(int, int)"),self.someMethod)             
...... do setBeckground stuff...
self.connect(self.table, QtCore.SIGNAL("cellChanged(int, int)"),self.someMethod)

または、あなたのテーブルでmainWindowを無効/有効にします...それが役立つことを願っています。

于 2013-06-25T13:37:37.840 に答える