[PyQt] connection to list view and combo pyqt

David Boddie dboddie at trolltech.com
Wed Jan 23 17:28:16 GMT 2008


On Wed Jan 23 17:08:15 GMT 2008, Peter Liedler wrote:

> I am still fighting to get connected to a selectionChanged signal of a
> listView.

I think there's been some confusion about what actually emits the
selectionChanged() signal. It's actually the list view's selection model:

http://www.riverbankcomputing.com/Docs/PyQt4/html/qabstractitemview.html#selectionModel

The signal is described here:

http://www.riverbankcomputing.com/Docs/PyQt4/html/qitemselectionmodel.html#selectionChanged

> If I understand the qt documentation, the QItemSelection is generated
> automatically by filling the index to the model and defining the model
> to the list.

I'm not sure what you mean. The selection model (which is set up by the view)
keeps track of the selected indexes in the model.

> I think I do so by:
> 
> Defining the model class:
> 
> class myListModel(QAbstractListModel): 
>     def __init__(self, datain, parent=None, *args): 
>         """ datain: a list where each item is a row
>         """
>         QAbstractTableModel.__init__(self, parent, *args) 
>         self.listdata = datain

This looks OK.

> In the main view I call a subfunction to set the index to the model:
> 
>         self.listModel = myListModel(TitleTrack, self)
>                 
>         #init listView
>         self.listViewTitleFill()
> 
> Where TitleTrack is a python list.

So, you're putting data into the model.

>     def listViewTitleFill(self):
>         """ init ListViews and build list models """
>         self.listModel = myListModel(TitleTrack, self)
>         self.listViewTitle.setModel(self.listModel)
>         self.listViewTitle.setSelectionMode(
>             QAbstractItemView.SingleSelection) 
>
> This part works fine. The list is filled and I can select items in
> there.

OK. You're defining the model again here, of course...

Now, this is the problem part:

>         self.connect(self.listViewTitle,
>             SIGNAL("selectionChanged(QItemSelection, QItemSelection)"),
>             self.titleSelected)
> 
> With this connect string I try to connect to the signal that is emitted
> when the selection is changed. But it is never called.
> What am I missing here.

You need to connect the selection model's signal to the titleSelected() slot:

    self.connect(self.listViewTitle.selectionModel(),
        SIGNAL("selectionChanged(QItemSelection, QItemSelection)"),
        self.titleSelected)

Does that work?

David
-- 
David Boddie
Lead Technical Writer, Trolltech ASA


More information about the PyQt mailing list