2013-04-20 44 views
0

如何使QAbstractTableModel「可檢查如何使QAbstractTableModel的數據可檢查

我想在下面的代碼中的每個單元可以由用戶,如何修改代碼選中或取消選中s的數據?

根據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_()) 

回答

1

重寫MyModel中的標誌函數。

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. 
+0

注意:當他說「從您的數據中讀取」和「修改您的數據」時,他指的是您必須創建並記錄的真/假清單。即self.checklist = True在xrange(self.rowCount())中爲_ – user2921352 2017-04-21 05:47:06