Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Snegovikufa от Февраль 09, 2011, 11:19



Название: переопределение setData в QStandartItemModel (PyQt)
Отправлено: Snegovikufa от Февраль 09, 2011, 11:19
Возникла проблема с заменой функции setData() , когда наследую модель от QStandartItemModel. Переопределил только функции flags() и setData().

При попытке изменить поле некой строчки в дереве происходит откат. Т.е. если раньше в поле было написано 'Yaya', я вписываю 'Nono', по нажатию Enter в поле снова записано 'Yaya'.

Сигнал dataChanged(QModelIndex&, QModelIndex&) я вызываю, но все равно не получается.
В чем может быть проблема?

Может быть надо какую-то еще функцию переопределить?
Код:
    def setData(self, index, value, role=QtCore.Qt.EditRole):
        if role != QtCore.Qt.EditRole:
            return False

        if index.column() == 0:
            value = str(value.toString())
            
            if index.row() == 0:
                self.contCubes.setName(value, index.row())
            if index.row() == 1:
                self.indCubes.setName(value, index.row())
                
            result = True
        
        if index.column() == 3:
            value = int(value)
            
            if index.row() == 0:
                self.contCubes.changeUndefValue(value, index.row())
            if index.row() == 1:
                self.indCubes.changeUndefValue(value, index.row())

            result = True
            
        if result:
            self.dataChanged.emit(index, index)
        return result


Название: Re: переопределение setData в QStandartItemModel (PyQt)
Отправлено: Snegovikufa от Февраль 10, 2011, 17:55
Возникла проблема с заменой функции setData() , когда наследую модель от QStandartItemModel. Переопределил только функции flags() и setData().

При попытке изменить поле некой строчки в дереве происходит откат. Т.е. если раньше в поле было написано 'Yaya', я вписываю 'Nono', по нажатию Enter в поле снова записано 'Yaya'.

Сигнал dataChanged(QModelIndex&, QModelIndex&) я вызываю, но все равно не получается.
В чем может быть проблема?

Может быть надо какую-то еще функцию переопределить?
Код:
Переписал модель на QAbstractItemModel. Потерял время, но работает  :)
    def setData(self, index, value, role=QtCore.Qt.EditRole):
        if role != QtCore.Qt.EditRole:
            return False

        if index.column() == 0:
            value = str(value.toString())
            
            if index.row() == 0:
                self.contCubes.setName(value, index.row())
            if index.row() == 1:
                self.indCubes.setName(value, index.row())
                
            result = True
        
        if index.column() == 3:
            value = int(value)
            
            if index.row() == 0:
                self.contCubes.changeUndefValue(value, index.row())
            if index.row() == 1:
                self.indCubes.changeUndefValue(value, index.row())

            result = True
            
        if result:
            self.dataChanged.emit(index, index)
        return result