2009-04-27 6 views
-1

Ich entwickle eine kleine App (genau das ist ein KDE4 Plasmoid) in PyQt/PyKde.Drag & Drop in KListWidget (PyQt/PyKde Programmierung)

In meiner app Ich habe eine KListWidget mit einigen Zeilen gefüllt finden Sie in diesem Bild:

http://img212.imageshack.us/img212/8444/sshot3.jpg

Ich brauche eine Drag & Drop-Aktion für die Listenzeilen zu implementieren, beispielsweise sollte ich in der Lage sein, Wenn Sie eine Datei über eine Zeile setzen, sendet die App diese Datei an den Namen in der Liste.

Die Liste dieses Code-Snippet erstellt wurde:

self.contactsList = KListWidget() 
self.contactsList.setFrameShape(QFrame.StyledPanel) 
self.contactsList.setFrameShadow(QFrame.Sunken) 
self.contactsList.setIconSize(QSize(35, 35)); 

Methode aufrufen, wenn Drag & Drop passiert, ist bereits umgesetzt, ich brauche nur die Methode, um die Liste in einer Weise ähnlich zu verbinden: dynamisch definiert werden kann, so lange, wie die Klasse

self.connect(self.contactsList, SIGNAL("signal_()"), self.method) 

Jede Hilfe wird

+0

Könnten Sie klären, was genau bereits implementiert wurde? Welche Methode möchten Sie mit der Liste verbinden? Meinst du eine Qt-Signal/Slot-Verbindung? –

Antwort

0

PyQt Signale zu erkennen, dass self.contact definiert s_list_method() erbt von QWidget, kann ein dynamisches Signal ausgeben.

Zum Beispiel am Ende des Verfahrens in dem contactsList Objekt, das Ihre Liste anhängen Code behandelt:

def contacts_list_method(self, someparameters): 
    doStuff() 
    doMoreStuff() 
    ... 
    self.emit(QtCore.SIGNAL("contacts_list_method_done()")) 

Dann in der Initialisierungsliste der Klasse, die das contactsList Objekt hält (oder wo auch immer Sie das Gefühl ist ein besserer Ort) setzte die folgende Verbindung:

self.connect(self.contactsList, SIGNAL("contacts_list_method_done()"), self.method) 

Sie könnten auch die QtCore.SIGNAL („contacts_list_method_done()“) als Objekt vordefinieren und dann einfach auf das Objekt beziehen, wenn Sie es in contacts_list_method emittieren.

+0

dieser Weg funktioniert nicht, aber ich habe mit einem qtreewidget anstelle der klistw gelöst – Giancarlo

+0

Sie sollten posten, was Sie tatsächlich als Antwort getan haben und wählen Sie es als die richtige Antwort (es sei denn es ist Unternehmensgeheimnis offensichtlich), so dass jeder profitieren kann. Ich stelle mir vor, dass viele Leute das von dir beschriebene Verhalten wollen :) –