2014-02-19 6 views
0

Я - разработчик NEWBIE на python, это мой первый сценарий на питоне. Я добавил QProgressBar в QTableview (QAbstractTableModel) как QItemDelegate, и он работает. QProgressBar действительно отображался, но он не может автоматически обновляться при редактировании или сортировке QTableview. Цвет фона QItemDelegate, выравнивание, редактирование не соответствуют роли? любая идея? Нужно ли использовать setmodeldata или seteditordata? любой пример в этом случае?Как обновить (setvalue, сортировка, редактирование, цвет фона) QProgressBar (QitemDelegate) внутри QTableview (QAbstractTableModel)

вот класс QAbstractTableModel

def data(self, index, role): 
    col = index.column() 
    row = index.row() 
    if not index.isValid(): 
     return QVariant() 
    elif role == Qt.BackgroundColorRole and row%2 == 0 : 
     return QVariant(QColor(60,60,60))    
    elif role == Qt.DisplayRole and col != 3 : 
     return QVariant(self.arraydata[row][col]) 
    elif role == Qt.EditRole and col != 3 : 
     return QVariant(self.arraydata[row][col]) 
    elif role == Qt.ToolTipRole : 
     return QVariant("tool tips") 
    elif role == Qt.TextAlignmentRole: 
     return QVariant(Qt.AlignCenter | Qt.AlignCenter) 

вот код делегата:

class progressDelegate(QItemDelegate): 
    def __init__(self, parent ): 

     QItemDelegate.__init__(self, parent) 
     self.tb = self.parent().shotslistTable 
     self.tm = self.parent().tm 

    def paint(self, painter, option, index): 

     self.pbar = QProgressBar(self.parent()) 
     col = index.column() 
     row = index.row() 
     self.pbar.setMinimum(0) 
     self.pbar.setMaximum(100) 
     self.pbar.setValue (int(self.tm.arraydata[row][col])) 
     self.pbar.setMaximumHeight(24) 
     if not self.tb.indexWidget(index): 
      self.tb.setIndexWidget(
       index, 
       self.pbar 
      ) 

ответ

0

данные обновляются можно было исправлено с помощью updateEditorGeometry, но не цвет фона:

def updateEditorGeometry(self, editor, option, index): 
    # input data by here will update automatically 
    col = index.column() 
    row = index.row() 
    val = int(self.tm.arraydata[row][col]) 
    editor.setValue (val) 

    editor.setGeometry(rect) 

 Смежные вопросы

  • Нет связанных вопросов^_^