3

QAbstractTableModel のデータをチェック可能にする方法

次のコードの各セルをユーザーがチェックまたはチェック解除できるようにしたいのですが、コードを変更するにはどうすればよいですか?

Qt のドキュメントによると:Qt::CheckStateRole を設定し、Qt::ItemIsUserCheckable を使用する可能性があるため、誰でも少しサンプルを提供できますか?

import sys                                 
from PyQt4.QtGui import *                              
from PyQt4.QtCore import *

class MyModel(QAbstractTableModel):   

    def __init__(self, parent=None):   

        super(MyModel, self).__init__(parent)   

    def rowCount(self, parent = QModelIndex()):   

        return 2

    def columnCount(self,parent = QModelIndex()) :   

        return 3

    def data(self,index, role = Qt.DisplayRole) :   

        if (role == Qt.DisplayRole):   

            return "Row{}, Column{}".format(index.row() + 1, index.column() +1)   

        return None

if __name__ == '__main__':   

    app =QApplication(sys.argv)   

    tableView=QTableView()   
    myModel = MyModel (None);    
    tableView.setModel( myModel );          
    tableView.show();   
    sys.exit(app.exec_())
4

1 に答える 1

6

MyModel の flags 関数をオーバーライドします。

def flags(self, index)
    return super(MyModel, self).flags(index)|QtCore.Qt.ItemIsUserCheckable

これは、モデルのインデックスがチェック可能であることを示しています。

次に、データ関数をオーバーライドします。

def data(self,index, role = Qt.DisplayRole) :   
    if (role == Qt.DisplayRole):   
        return "Row{}, Column{}".format(index.row() + 1, index.column() +1)
    elif (role==Qt.CheckStateRole):
        # read from your data and return Qt.Checked or Unchecked
    return None

最後に、setData 関数を実装する必要があります。

def setData(self, index, value, role = Qt.EditRole):
    if (role==Qt.CheckStateRole):
        # Modify your data.
于 2013-04-21T07:35:33.640 に答える