[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyQt] QComboBox and Models
From:       Martin =?utf-8?q?H=C3=B6fling?= <martin.hoefling () gmx ! de>
Date:       2008-02-26 11:51:43
Message-ID: 200802261251.44167.martin.hoefling () gmx ! de
[Download RAW message or body]

Hi all,

i have a QComboBox with a model as content. I checked the data() method of my 
model and it should properly return a QVariant(QString(myentry))

It seems as if obtaining the values is fine, since auto-completition if I type 
inside works, but if I wanna use the dropdown menu (set the maxVisibleEntries 
to 5), it shows no entries. I don't want to store any changes made in the 
combobox since I just use it's content (any string) as a filter for another 
model, so I omitted the setData method, is that correct?

Any ideas what could be wrong?

Best wishes
	Martin

Here's the model implementation.

class NameListModel(QAbstractListModel):
    def __init__(self):
        super (NameListModel,self).__init__()
        self.list=[]
    
    def rowCount(self, index=QModelIndex() ):
        return len(self.list)
    
    def data(self,index,role=Qt.DisplayRole):
        if not index.isValid() or not (0<=index.row() < len(self.list)):
            return QVariant()
        if role == Qt.DisplayRole or role == Qt.EditRole:
            return QVariant(self.list[index.row()])
        else:
            return QVariant(self.list[index.row()])
            
        
    def headerData(self, section, orientation, role=Qt.DisplayRole):
        if role == Qt.TextAlignmentRole:
            if orientation == Qt.Horizontal:
                return QVariant(int(Qt.AlignLeft|Qt.AlignVCenter))
            return QVariant(int(Qt.AlignRight|Qt.AlignVCenter))
        
        if role != Qt.DisplayRole:
            return QVariant()
            
    def insertRows(self,position, rows=1, index=QModelIndex()):
        self.beginInsertRows(QModelIndex(),position, position+rows-1)
        
        for row in range(rows):
            self.list.insert(position+row-1,QString())
        
        self.endInsertRows()
        return True
    
    def removeRows(self,position,rows=1, index=QModelIndex()):
        self.beginRemoveRows(QModelIndex(),position,position+rows-1)
                    
        self.list = self.list[:position]+self.list[position+rows:]
        
        self.endRemoveRows()
        return True
        
    def getQStringList(self):
        retl=QStringList()
        for strg in self.list:
            retl.append(strg)
        
    def addString(self, string):
        strg=QString(string)
        for i in range(len(self.list)):
            if strg==self.list[i]:
                return
        self.insertRows(0)
        self.list[0]=strg
        self.list.sort()
    
    def removeString(self, string):
        strg=QString(string)
        for i in range(len(self.list)):
            if strg==self.list[i]:
                self.removeRows(i)
                return
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic