PyQt4: My adatbázis megjeleníti üres cellák

szavazat
48

Én használ a pyqt4 keret némi kijelzők adatbázis formájában. Sajnos elakadna, miközben próbáljuk kiszűrni, és megjeleníti az adatbázis szerint vezetéknevét. Tegyük fel, hogy az adatbázis-kapcsolat működik. Feltételezzük, hogy van a megfelelő mennyiségű tételek én tupleHeader mióta ugyanazt initializeModel módszert más módszerekkel (például a keresés () függvény az alábbiakban leírt, és ez jól működik.

Hívom a kijelző () függvényt és működik tökéletesen, de ha létre proxyModel a sourceModel, és próbálják megjeleníteni a proxyModel én keresési funkció, van üres cellák jelennek meg. Mikor korlátozhatja a keresést úgy, hogy kiszűri a fele az adatbázis, azt mutatja, hogy sok sejtek (így a legtöbb ez működik). De ez nem jelenik meg semmi magából az adatbázisból.

Az alábbiakban néhány kódomat:

from PyQt4 import QtGui, QtCore, QtSql

self.caseSensitivity = QtCore.Qt.CaseInsensitive
self.syntax = QtCore.QRegExp.FixedString

def initializeModel(self, model):
    model.setTable(self.table)
    #model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
    b = 0
    for a in self.tupleHeader:
        model.setHeaderData(b, QtCore.Qt.Horizontal, QtGui.qApp.tr(a))
        b += 1
    model.select()


def display(self):
    '''reads all row data and displays it on a tableview'''
    self.connectdb(self.db, self.localhost, self.dbname, self.username, self.password)

    model = QtSql.QSqlTableModel()
    self.initializeModel(model)
    self.view.setModel(model)

    self.disconnectdb(self.db)


def search(self, searchQuery):
    '''queries database data, filters it, and displays it on a tableview'''      
    sourceModel = QtSql.QSqlTableModel()
    proxyModel = QtGui.QSortFilterProxyModel()

    self.initializeModel(sourceModel)
    proxyModel.setSourceModel(sourceModel) # allows to edit proxyModel without changing underying model

    #searchQuery contains the last name that I am filtering with
    regExp = QtCore.QRegExp(searchQuery, self.caseSensitivity, self.syntax)
    proxyModel.setFilterRegExp(regExp)
    proxyModel.setFilterKeyColumn(2) # this column holds the last names

     # self.view contains the table itemview my application uses to display the database
    self.view.setModel(proxyModel)

EDIT: Nem vagyok érdekelt tartani ezt a kódrészletet, én csak azt szeretném tudni, hogy miért teszi az asztalra, hogy bemutassák a táblázat tartalmát, hanem egy csomó üres cellák

print self.proxyModel.filterAcceptsRow(2, self.sourceModel)

Továbbá, ha ebbe a után az utolsó állítás (self.view.setModel (proxyModel)), akkor megjelenik az asztalon, még ha nem küld hibaüzenetet:

nyomtatási self.proxyModel.filterAcceptsRow (2, self.sourceModel) Típushiba: QSortFilterProxyModel.filterAcceptsRow (int, QModelIndex): argumentum 2 nem várt típusú 'QSqlTableModel'

Nem számít, milyen érvek e, vagy azt használja filterAcceptsRow ro filterAcceptsColumn, megjeleníti az asztalra. Vajon ez szűkíti a probléma is?

Köszönöm, hogy időt keresi a kódolási hiba / bug, és boldog vadászatot!

A kérdést 08/06/2010 11:56
felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Bár nem tudtam megtalálni a megoldást a problémára, akkor magától megoldódott. Nem vagyok biztos, de azt hiszem, ez volt az a kódrészlet tette működik.

self.dbmanip = CoreDB(self.userTableView, self.table)

Ezt betenni a SetupUi () metódus által létrehozott Qt4 tervező. Azt hiszem, sem a dbmanip, amely tartalmazta a Tableview elvesztette az információt a proxyModel, vagy (inkább), lehet, hogy a hivatkozott rossz tábla közötti proxyModel és az eredeti modell (amely megteremtette a proxyModel), majd nem tudta megjeleníteni, mert azt hívja a sejt szerkezete egy asztal és az aktuális információkat a másiktól.

Ezek mind találgatások ellenére. Mégis, a probléma megoldódott.

Válaszolt 10/06/2010 12:15
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more