QTreeView und click connection

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
roose
User
Beiträge: 4
Registriert: Dienstag 28. April 2009, 20:43

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.
Zuletzt geändert von roose am Montag 4. Mai 2009, 14:41, insgesamt 1-mal geändert.
roose
User
Beiträge: 4
Registriert: Dienstag 28. April 2009, 20:43

self.connect(self.proxyView, QtCore.SIGNAL('doubleClicked(const QModelIndex &)'), self.browse_web)

Jetzt funktioniert es. Keine Ahnung warum das vorhin nicht getan hat.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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.)
http://www.kinderpornos.info
Antworten