Bonjour. Après quelques recherches sur le sujet, je ne vis que ce site : http://matthieu-brucher.developpez.c...t/signal-slot/.
Comment peut-on changer la valeur d'une variable surtout boléenne. Merci.
Version imprimable
Bonjour. Après quelques recherches sur le sujet, je ne vis que ce site : http://matthieu-brucher.developpez.c...t/signal-slot/.
Comment peut-on changer la valeur d'une variable surtout boléenne. Merci.
Après quelques essais, cela donne :
Pourquoi cela ne marche-t-il pas ?Code:QObject::connect(bouton, SIGNAL(clicked()), qApp, SLOT(appuyer = true));
Sûrement parce que SLOT demande une fonction.
As-tu essayé ceci? :mrgreen:
Fichier Exemple.hFichier Exemple.cppCode:
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 #include <QMainWindow> class QPushButton; class Exemple: public QMainWindow { Q_OBJECT public: Exemple(); // ... public slots: void s_clicked(); // ... private: QPushButton* button; char my_char; bool my_bool; int my_int; // ... };
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include "Exemple.h" #include <QApplication> #include <QPushButton> Exemple::Exemple(): QMainWindow(), my_char('\0'), my_bool(false), my_int(0) { button = new QPushButton("Hello!", this); connect(button, SIGNAL(clicked()), this, SLOT(s_clicked())); // ... } void Exemple::s_clicked() { my_char = 'c'; my_bool = true; my_int = 100; // ... }
Je pense qu'il faille que je change l'ordre.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include "MaFenetre.h" #include <QNetworkReply> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QUrl> #include <QtNetwork> MaFenetre::MaFenetre() : QWidget() { bouton = new QPushButton("GO !", this); bouton->show(); QObject::connect(bouton, SIGNAL(clicked()), *appuyer, SLOT(changerDeValeur))); } bool MaFenetre::changerDeValeur() : QWidget() { appuyer = true; return appuyer; }
apparaît lorsque j'ai avancé mon code ainsi :Code:
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 #ifndef MAFENETRE_H #define MAFENETRE_H #include <QPushButton> #include <QNetworkReply> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QUrl> #include <QtNetwork> class MaFenetre : public QWidget { public : MaFenetre(appuyer); bool changerDeValeur(); void connect(); private : QPushButton *bouton; bool m_appuyer; }; #endif // MAFENETRE_H
Pourquoi ?Code:
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 #include "MaFenetre.h" #include <QNetworkReply> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QUrl> #include <QtNetwork> MaFenetre::MaFenetre(m_appuyer = false) : QWidget() { bouton = new QPushButton("GO !", this); bouton->show(); } bool MaFenetre::changerDeValeur() : QWidget() { appuyer = true; return appuyer; } void MaFenetre::methodeAppuyer() : QWidget() { QObject::connect(bouton, SIGNAL(clicked()), *appuyer, SLOT(changerDeValeur))); }
Désolé, non, je voulais réorganiser l'ordre des méthodes pour que le signal et le slot ne soient pas dans le constructeur afin de les appeler par une méthode déclarée(ou définie, je ne sais pas) avant.
:mrgreen: Ok. Peux-tu me dire comment on fait en pratique ?
Cela me parait logique de connecter le signal d'un bouton ou d'un autre élément UI dans le constructeur de l'application (le plus rapidement possible donc) :mrgreen:
Mais je n'ai plus le souvenir dans les exemples Qt s'ils font ainsi :wow: : il faudrait regarder
Rompons ! Je vous prie de me donner le modèle classique de ce schéma.