Wie kann ich von außerhalb, auf some_function zugreifen, wenn ich "action" gegeben habe. Sprich auf das Funktionsobjekt, das emittiert wird, wenn triggered ausgelöst wird.
@anogayales: Ich würde mal sagen gar nicht. Es wird das Signal emittiert und nicht die Funktion, und ausserdem gibt es nicht *die* Funktion. Mit einem Signal können 0 bis beliebig viele Slots verbunden sein. Und die Slots können auch ausschliesslich auf C++-Seite existieren.
Nach Lektüre der Qt-Dokumentation zu Signalen/Slots denke ich nicht, dass man an die Slots heran kommen kann. Es ist gewollt, dass sowohl Signale als auch Slots nicht „wissen“ ob und mit wem sie verbunden sind.
Wozu brauchst Du die Funktion denn? Einfach nur ausführen kannst Du sie mit der `QAction.trigger()`-Methode.
Sofern es tatsächlich nichts fertiges gibt, könntest du notfalls `QObject.connect()` re-implementieren. Das Signal-Slot-Konzept lässt sich mittels Wörterbuch abbilden (z.B. Signale als Schlüssel - Empfänger als Werte). Nachdem du dir also die Argumente für `signal` und `receiver` gemerkt hast, rufst du innerhalb der überschriebenen Methode das eigentliche `QObject.connect()` auf. Wie man das eben so beim Überschreiben von Methoden macht...
Bedenke nur, dass bei dieser Variante natürlich alle Widgets, bei denen du Verbindungen tätigst bzw darauf "lauschen" willst, von deiner speziellen `QObject`-Implementierung erben müssten.
Oder geht es dir gar nicht um die bestehenden Verbindungen, sondern wirklich erst um den Moment, in dem etwas durch ein Signal ausgelöst wird?
Hintergrund ist, dass ich gerade ein kleines Menü nachbaue, bei dem ich leider nicht von QMenu erben kann. Im Grunde genommen starte ich eine QGraphicsview, dass ein ursprünglich kreatiertes QMenu entgegennimmt und daraus das eigene Menü baut. Wenn ich nun action.trigger() aufrufe, wird mir nur gesagt, dass das Objekt nicht mehr exisitert: RuntimeError: underlying C/C++ object has been deleted. Auch wenn ich darauf eine Referenz halte.
@anogayales: Das hört sich IMHO komisch an. Wenn die `QAction` immer noch über ein Menü erreichbar ist, muss sie ja noch auf der C++-Ebene existieren. Kann es sein, dass Du irgend wo bei den Elternbeziehungen einen Fehler gemacht hast?
Um das noch ein bisschen mehr zu präzisieren: Es geht nicht nur um Widgets, sondern generell um jedes `QObject` (C++ und damit auch Python), weil die Objektbäume und die damit einhergehende Speicherverwaltung auf C++-Seite schon bei diesem Qt-„Grundobjekt“ ansetzt.