1

私のQTableViewでは、チェックボックスの最初の列を作成しようとしていますが、チェックボックスで満たされたすべての行列を取得しており、デフォルトですべてチェックされています。チェックボックスの状態も変更できません。

class MyTableModel(QtCore.QAbstractTableModel):
    def __init__(self, listData=[[]], headers=[], parent=None):
        super(MyTableModel, self).__init__(parent)

        self.__listData = listData
        self.__headers = headers


    def data(self, index, role):
        row = index.row()
        column = index.column()
        value = self.__listData[row][column]

        if role == QtCore.Qt.CheckStateRole:
            if self.__listData[row] == 0:
                return QtCore.QVariant(QtCore.Qt.Unchecked)
            else:
                return QtCore.QVariant(QtCore.Qt.Checked)
        if role == QtCore.Qt.EditRole:
            return value
        if role == QtCore.Qt.DisplayRole:
            return value
4

2 に答える 2

1

今は PyQT についてではありませんが、c++Qt との違いはないと思います。Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex & index) constチェック可能な列をオーバーライドして返す必要がありますQt::ItemIsUserCheckable

于 2015-09-11T12:01:50.353 に答える
0

この質問に出くわしました。あなたが答えを見つけたかどうかはわかりません。あなたの質問に答えるには、最初の列だけにチェックボックスが必要な場合は、 returnQtCore.Qt.UncheckedまたはQtCore.Qt.Checkedonly for indexwithが必要column == 0です。したがって、コードを次のように変更できます。

def data(self, index, role):
    row = index.row()
    column = index.column()
    value = self.__listData[row][column]

    if role == QtCore.Qt.CheckStateRole and column == 0:
        if self.__listData[row] == 0:
            return QtCore.QVariant(QtCore.Qt.Unchecked)
        else:
            return QtCore.QVariant(QtCore.Qt.Checked)
    if role == QtCore.Qt.EditRole:
        return value
    if role == QtCore.Qt.DisplayRole:
        return value

そして、 が入っているかどうかを確認indexし、それに応じself.__listDataて返すことができます。QtCore.Qt.UncheckedQtCore.Qt.Checked

于 2015-11-24T09:07:02.163 に答える