2014-01-26 2 views
1

첫 번째 열을 확인란으로 만들고 그 상태를 확인하려면 어떻게해야합니까? 플래그()를 재정의하지만 작동하지 않는 것 같습니다. 문제가있는 곳은 어디입니까?QAbstractTableModel로 확인란 만들기

그리고이 코드는 links이지만 내 코드에서도 작동합니다. 또한 너무 복잡하기 때문에 대리인을 사용하고 싶지 않습니다.

data = [['00','01','02'], 
     ['10','11','12'], 
     ['20','21','22']] 

class MainWindow(QWidget): 
    def __init__(self, parent=None, *args): 
     super(MainWindow, self).__init__(parent) 

     clipTableWidget = QTableWidget() 
     self.model = TModel(data, self) 
     clipTableView = QTableView() 
     clipTableView.setModel(self.model) 
     layout = QVBoxLayout() 
     layout.addWidget(clipTableView) 
     self.setLayout(layout) 

class TModel(QAbstractTableModel): 

    def __init__(self, datain, parent=None): 
     super(TModel, self).__init__(parent) 
     self.arraydata = datain 

    def rowCount(self, parent=QModelIndex()): 
     return len(self.arraydata) 

    def columnCount(self, parent=QModelIndex()): 
     return len(self.arraydata[0]) 

    def data(self, index, role): 
     if not index.isValid(): 
      return QVariant() 
     elif role != Qt.DisplayRole: 
      return QVariant() 
     return QVariant(self.arraydata[index.row()][index.column()]) 

    def flags(self, index): 
     if not index.isValid(): 
      return QVariant() 
     elif index.column() == 1: 
      return Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsUserCheckable 
     return QVariant() 
+0

여기에서 문제는 플래그를 Qt.ItemIsUserCheckable이라고 말하면서 데이터를 저장할 항목을 사용하지 않는다는 것입니다. 이 특성을 구현하려면 항목이 필요합니다. – TheCreator232

답변

0

여기에 해결책이 있습니다. 왜 플래그가 작동하지 않는지는 플래그가 텍스트에서 작동하지 않기 때문에 QItem을 의미합니다.

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

class MainWindow(QWidget): 
    def __init__(self, parent=None, *args): 
     super(MainWindow, self).__init__(parent) 
     data = [['00','01','02'], 
     ['10','11','12'], 
     ['20','21','22']] 
     clipTableWidget = QTableWidget() 

     self.model = QStandardItemModel(self) 
     clipTableView = QTableView() 
     count1=0 
     for row in data: 
      count2 = 0 
      for column in row: 
       if count2 == 0: 
        item = QStandardItem(column) 
        item.setCheckable(True) 
        item.setCheckState(False) 
        item.setFlags(Qt.ItemIsUserCheckable| Qt.ItemIsEnabled) 
        self.model.setItem(count1,count2,item) 
        count2+=1 
       else: 
        item = QStandardItem(column) 
        self.model.setItem(count1,count2,item) 
        count2+=1 
      count1+=1 


     clipTableView.setModel(self.model) 
     layout = QVBoxLayout() 
     layout.addWidget(clipTableView) 
     self.setLayout(layout) 

def main(): 
    app = QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 


if __name__ == "__main__": 
    main()