Russian Qt Forum
Ноябрь 23, 2024, 23:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: переопределение setData в QStandartItemModel (PyQt)  (Прочитано 2954 раз)
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
Записан
Snegovikufa
Гость
« Ответ #1 : Февраль 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 21.