Bonjour,
Je débute avec Qt et je cherche à me faire la main avec un truc simple. J'ai bien commencé avec le tuto officiel mais c'est un poil trop basique. Je suis en train de lire celui de Matthieu Brucher (Signaux et slots avec Qt4) mais je bloque. Tous les exemples de code que j'ai trouvé construisent leur interface avec une classe qui hérite de QMainWindow et qui commence avec Q_OBJECT. J'ai voulu faire autrement et évidemment ca ne fonctionne pas. Donc je cherche à comprendre si le modèle que l'on trouve est OBLIGATOIRE ou si je m'y prends simplement mal. Voici donc mon code.
Tel quel ça compile et "s’exécute" avec les avertissements suivants :
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 #include <QApplication> #include <QPushButton> #include <QtGui> #include <QPlastiqueStyle> #include <QProgressBar> class MyProgressBar : public QProgressBar { // Q_OBJECT private: int toto; public: MyProgressBar(QWidget *parent = 0); public slots: void add(void); void sub(void); }; MyProgressBar::MyProgressBar(QWidget *parent) : QProgressBar(parent) { ... } void MyProgressBar::add(void) { ... } void MyProgressBar::sub(void) { ... } int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setStyle(new QPlastiqueStyle); QWidget window; window.resize(410, 40); QPushButton more("more", &window); more.setFont(QFont("Times", 8, QFont::Bold)); more.setGeometry(10, 4, 40, 20); MyProgressBar val(&window); val.setGeometry(55, 4, 300, 20); val.setMaximum(100); val.setMinimum(0); QPushButton less("less", &window); less.setFont(QFont("Times", 8, QFont::Bold)); less.setGeometry(360, 4, 40, 20); QObject::connect(&more, SIGNAL(clicked()), &val, SLOT(add())); QObject::connect(&less, SIGNAL(clicked()), &val, SLOT(sub())); window.show(); return app.exec(); }
Démarrage de C:\Documents and Settings\sbenoit\test2-build-desktop\debug\test2.exe...
Object::connect: No such slot QProgressBar::add() in ..\test2\test.cpp:68
Object::connect: No such slot QProgressBar::sub() in ..\test2\test.cpp:69
Évidemment il ne se passe rien quand je clique sur les boutons.
Si je dé-commente le Q_OBJECT dans la définition de ma classe ça ne compile plus.
Voila si vous pouvez m'éclairer c'est avec plaisir que je lirai vos explications.
Comme je l'ai dis j'apprends mais je souhaite pas juste apprendre à suivre un chemin tout tracé mais à comprendre.
Merci
Partager