В модели не вызывается метод data

Проект на питоне и PyQt. Модель грузит инфу из БД, все рисуется на форме, в табличке. Добавил не много функционала, все грузится из базы нормально, но метод data не вызывается вообще. Следовательно, таблица рисуется пустая. А должно быть минимум по 1-2 записи.Часть кода:
class Model(QAbstractTableModel):
    def __init__(self, parent):
        QAbstractTableModel.__init__(self, parent)
        self.items = []
 
    def loadItems(self):
        db = QtGui.qApp.db
        table = db.table('tab')
        stmt = db.selectStmt(table)
        query = db.query(stmt)
 
        while query.next():
            record = query.record()
            v_year = forceString((record.value('1')))
            v_ovra = forceString((record.value('2')))
            v_ovrb = forceString((record.value('3')))
            v_chlb = forceString((record.value('4')))
            v_chlc = forceString((record.value('5')))
            v_espr = forceString((record.value('6')))
            self.items.append([v_year, v_ovra, v_ovrb, v_chlb, v_chlc, v_espr])
    
        
    def data(self, index, role=Qt.DisplayRole):
        column = index.column()
        row = index.row()
        
        if role == Qt.DisplayRole:
            item = self.items[row]
            return toVariant(item[column])
        return QVariant()
Поправка - список с данными содержит нормальные, корректные значения из БД. Все как надо. Но ни чего не отображается, вообще.Ни у кого нет идей?
8 ответов

Нужно для отображения использовать QListView или QTableView. Тогда и будет вызов метода data для отображения данных. Может программа не вся показана....


Нужно для отображения использовать QListView или QTableView
Ну конечно они используются, вьюверы эти. Конкретно - QTableView.УПД: еше сигнал об изменении данных отправляю, не помогает:
def update(self):
        index1 = self.index(0, 0)
        index2 = self.index(self.columnCount(), self.rowCount())
        self.dataChanged.emit(index1, index2)


setModel не забыли? Попробуйте в data() вместо Qvariant возвращать строку, причём юникод, Qt его любит.


setModel не забыли?
Конечно не забыл. Все на месте.
Попробуйте в data() вместо Qvariant возвращать строку, причём юникод, Qt его любит.
Окей, но на сколько я знаю, там и так юникод внутри QVariant.Кстати, заметил еще одну вещь - если вызвать метод загрузки данных в конструкторе, то все работает. Если позже - нет.


Странно. Кстати, а где у вас rowCount и colCount?


def columnCount(self, index = None):
        return 6
 
 
def rowCount(self, index = QModelIndex()):
        return len(self.items)
Да есть все. Я не понимаю, в чем проблема. Это бред какой-то.


Хз. Попробуйте в конструкторе заполнить какими-нибудь фейковыми данными.
self.items = [[str(i) for i in xrange(6)]]
А, кажется понял. Если добавляем ряды после конструктора, надо обрамлять это дело beginInsertRows/endInsertRows. Там отстреляются нужные события.


надо обрамлять это дело beginInsertRows/endInsertRows
Спасибо! Два дня голову ломал. При чем, и сигналы кидал при смене содержимого - не помогло. Спасибо, еще раз