Wie kann ich die Signal / Slot-Verbindungen während des Kompilierens überprüfen?

8

Die Überprüfung der Qt-Signal-Slot-Verbindung zur Laufzeit ist eine Sorge für mich. Ich sollte eine statische Überprüfung der connect-Anweisungen ausführen können.

Existiert ein solches Tool?

    
Phil Hannent 03.01.2012, 09:39
quelle

6 Antworten

3

Mit QT5 können Sie die folgende Syntax verwenden, die zur Kompilierzeit statisch überprüft wird:

%Vor%     
Pierluigi 15.10.2014, 10:21
quelle
3
  

Existiert ein solches Tool?

Es wäre schön, wenn es ein solches Werkzeug gäbe, aber leider existiert es nicht, weil der Signal / Slot-Mechanismus in qt implementiert ist. Aus diesem Grund ist es auch nicht möglich, statisch zu prüfen, ob ein Signal in den Steckplatz passt.

Wenn qt etwas wie Boost's Signal / Slots verwendet, wäre es möglich.

    
BЈовић 03.01.2012 10:23
quelle
2

Sie könnten erwägen, ein GCC-Plugin in C oder eine MELT Erweiterung zu erstellen. MELT ist eine domänenspezifische Sprache, um einfach GCC-Erweiterungen zu codieren . Mit Plugins oder MELT-Erweiterungen könnten Sie die internen Repräsentationen (insbesondere Tree-s, die C + + -Klasse- und -Funktionsdeklarationen darstellen) analysieren und ein spezielles Werkzeug dafür erstellen.

Die Erweiterung des GCC erfordert jedoch, seine recht komplexe interne Repräsentation zu verstehen, und würde mehr als eine Woche an Bemühungen für eine Person erfordern, die die GCC Interna nicht kennt.

Vielleicht lohnt sich ein solcher Aufwand nicht, es sei denn, Ihre Qt-Anwendung ist wirklich groß. Wenn Sie darüber nachdenken, mit MELT zu arbeiten, würde ich mich freuen, Ihnen zu helfen.

    
Basile Starynkevitch 03.01.2012 10:32
quelle
2

Ich habe so etwas in meinem Code verwendet:

%Vor%

Ich habe es anstelle des einfachen Aufrufs von connect () verwendet. Hilft es dir?

    
UmNyobe 04.01.2012 14:43
quelle
1

Sie können dies nicht zur Kompilierzeit überprüfen, aber wenn Sie das Programm im Debug-Modus innerhalb von Qt Creator ausführen, wird eine hilfreiche Diagnosemeldung im Bereich Anwendungsausgabe angezeigt, wenn ein connect -Aufruf fehlschlägt. Siehe meine Antwort hier .

    
TonyK 03.01.2012 11:10
quelle
1

Um mit einer großen Qt4-Codebasis zu arbeiten, habe ich einen solchen Checker als Plugin geschrieben für Clang Static Analyzer

Siehe: Ссылка

Beispiel für eine Testabdeckung:

%Vor%     
fghj 11.11.2015 23:52
quelle