C'est donc bien ce qui me semblait : signals et slots sont bien plus que de simples macros standards. L'utilisation le la bibliothèque Qt requiert l'utilisation d'un préprocesseur non-standard.
En conséquence, un compilateur C++ ne peut en aucun cas traiter un code Qt de façon native. Et il en sera de même pour un analyseur de code.
Quoi que…
Je réfléchis un peu. Puisque signals et slots sont #définies de façon standard dans le code, un préprocesseur standard n'y verra que du feu, et ceci :
… deviendra cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <QObject> class Counter : public QObject { Q_OBJECT public: Counter() { m_value = 0; } int value() const { return m_value; } public slots: void setValue(int value); signals: void valueChanged(int newValue); private: int m_value; };
… ce qui est du code tout à fait standard, qui passera tout à fait l'analyse syntaxique. Le résultat de l'analyse sera donc correct… à condition que l'analyse sémantique n'aille pas trop loin (par exemple tracer précisément l'appel au callback) !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 //inclusion de l'en-tête QObject class Counter : public QObject { //remplacement de la macro Q_OBJECT par sa définition //(hors MOC, admettons que ce soit équivalent à du code vide, comme slots) public: Counter() { m_value = 0; } int value() const { return m_value; } public: void setValue(int value); protected: void valueChanged(int newValue); private: int m_value; };
Bon bon bon… Qt remonte un peu dans mon estime
Partager