Sollte ich Qt-Signal / Slot-Mechanismen gegenüber herkömmlichen Callbacks verwenden?

7

Ein leitender Entwickler in meinem Team verwendete traditionelle Callbacks im C-Stil in unserer Qt-Anwendung, anstatt das Qt-Signal zu verwenden / Slot-Mechanismen.

Mein erster Reflex wäre, seinen Code zu ersetzen und stattdessen Qt-Signal / Slot zu verwenden.

Gibt es gute Gründe, Callbacks in einer Qt-Anwendung / Bibliothek zu verwenden?

Danke.

    
Etienne Savard 09.06.2010, 15:26
quelle

2 Antworten

18

Ich denke, der bessere Ansatz wäre, das Framework, das Sie verwenden, zu nutzen und Signal / Slots zu verwenden.

Wenn der betreffende Code funktioniert und nicht hässlich ist oder Probleme verursacht, dann sollten Sie ihn am besten in Ruhe lassen.

In der Signal / Slot-Dokumentation wird beschrieben, warum der Signal / Slot-Ansatz besser ist:

>
  

Callbacks haben zwei grundlegende Fehler:   Erstens sind sie nicht typsicher. Wir   kann nie sicher sein, dass die   Verarbeitungsfunktion wird das aufrufen   Rückruf mit den richtigen Argumenten.   Zweitens ist der Rückruf stark   gekoppelt mit der Verarbeitungsfunktion   da muss die Bearbeitungsfunktion sein   wissen, welcher Callback angerufen werden soll.

Beachten Sie Folgendes:

  

Im Vergleich zu Callbacks sind Signale und Slots aufgrund der höheren Flexibilität ein wenig langsamer

Die Geschwindigkeit spielt in den meisten Fällen keine Rolle, aber es kann einige extreme Fälle wiederholter Anrufe geben, die einen Unterschied machen.

    
Brian R. Bondy 09.06.2010, 15:27
quelle
2

Sie sollten zwischen Callbacks unterscheiden, die synchron sind und für die Rückgabe von entweder allmählichen Ergebnissen oder Tupeln (mehrere Elemente wie "& lt; & gt; aber mehr) und Callbacks, die asynchrone lose Kopplung sind, verwendet werden. Für letztere sollten normalerweise Signale / Slots verwendet werden. Für Ersteres kann es in beiden Fällen sinnvoll sein, je nachdem, ob es eine Hauptfunktion Ihrer Anwendung ist (Signale / Slots verwenden) oder die Schnittstelle einer Nicht-GUI-Bibliothek, die portabler sein könnte (verwenden Sie einfache Callbacks für einfaches C / C ++) tragbarer Code).

Im Allgemeinen habe ich prägnante Programmierungsregeln, die dazu tendieren, auf die sauberste und geringste Code / Interface-Komplexität zu verweisen. Für den Tupel-Return-Fall verwende ich oft QMap, anstatt eine weitere Klassendefinition oder Signal / Slot- oder Callback-Methode zu erstellen. Dies funktioniert auch gut zum Bündeln und Übergeben von Parametern, insbesondere für Dinge, die sich in verschiedenen Teilen des Systems entwickeln müssen.

    
sdw 14.03.2011 17:48
quelle

Tags und Links