Seite 1 von 1

QTreeView und click connection

Verfasst: Montag 4. Mai 2009, 14:22
von roose
Hi,

ich habe mir zur Veranschaulichung das
basicsortfiltermodel.py genommen (wird mit pyqt ausgeliefert)
und aufs wesentliche gekürzt.

Mein problem nun ... Klicke ich auf einen Eintrag möchte ich das mit einer definierten Funktion connecten. Leider klappt das so nicht :(

Code: Alles auswählen

#!/usr/bin/env python

import sys
from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.proxyModel = QtGui.QSortFilterProxyModel()
        self.proxyModel.setDynamicSortFilter(True)

        self.proxyGroupBox = QtGui.QGroupBox("Sorted/Filtered Model")

        self.proxyView = QtGui.QTreeView()
        self.proxyView.setModel(self.proxyModel)
        self.proxyView.setExpandsOnDoubleClick(False)

        # Wie connecte ich einen Tree Eintrag?
        self.connect(self.proxyView, 
            QtCore.SIGNAL('doubleClicked(QModelIndex*,int)'), self.browse_web)
        self.connect(self.proxyModel,
            QtCore.SIGNAL('doubleClicked(QModelIndex*,int)'), self.browse_web)
     

        proxyLayout = QtGui.QGridLayout()
        proxyLayout.addWidget(self.proxyView, 0, 0, 1, 3)
        self.proxyGroupBox.setLayout(proxyLayout)

        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.proxyGroupBox)
        self.setLayout(mainLayout)

    def browse_web(self):
        print 'hallo'

    def setSourceModel(self, model):
        self.proxyModel.setSourceModel(model)

def addMail(model, subject, email):
    model.insertRow(0)
    qsi = QtGui.QStandardItem()
    qsi.setText(subject)
    qsi.setEditable(False)
    model.setItem(0,0,qsi)
    qsi = QtGui.QStandardItem()
    qsi.setText(email)
    qsi.setEditable(False)
    model.setItem(0,1,qsi)


def createMailModel(parent):
    model = QtGui.QStandardItemModel(0, 2, parent)
    model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Subject"))
    model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant("E-Mail"))

    addMail(model, "subject 1", "email 1")
    addMail(model, "subject 2", "email 2")
    
    return model

app = QtGui.QApplication(sys.argv)
window = Window()
window.setSourceModel(createMailModel(window))
window.show()
sys.exit(app.exec_())
Habe schon mit einer Menge Signalsignaturen herumprobiert, aber ohne Erfolg.

Verfasst: Montag 4. Mai 2009, 14:40
von roose
self.connect(self.proxyView, QtCore.SIGNAL('doubleClicked(const QModelIndex &)'), self.browse_web)

Jetzt funktioniert es. Keine Ahnung warum das vorhin nicht getan hat.

Verfasst: Montag 4. Mai 2009, 14:41
von Dill
QTreeview erbt das signal doubleClicked von QAbstractItemView:

Code: Alles auswählen

void doubleClicked (const QModelIndex&)
das passt aber nicht zu deiner signal-signatur:

Code: Alles auswählen

QtCore.SIGNAL('doubleClicked(QModelIndex*,int)')

EDIT:
gar nicht gemerkt, dass du es schon gelöst hattest.
noch ein hinweis: das '&' kannst du weglassen. (achtung '*' darfst du nie weglassen.)