Cours:QT : Différence entre versions
(Page créée avec « ={{Rouge|graphisme}}= =={{Bleu|Modifier la couleur d'un bouton}}== On utilise la méthode setStyleSheet : <source lang=c> monBouton.setStyleSheet("background-color: bla... ») |
m |
||
| (15 révisions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
| + | |||
| + | ={{Rouge|signal/slot}}= | ||
| + | |||
| + | La page [http://doc.qt.io/qt-5/signalsandslots.html signal&slots] de la documentation QT peut être intéressante à consulter. | ||
| + | |||
| + | =={{Bleu|relier signal et slot}}== | ||
| + | |||
| + | On utilise la fonction {{Rouge|connect}} : | ||
| + | |||
| + | connect( objet émetteur, signal émis , objet récepteur, signal reçu ); | ||
| + | |||
| + | ex : | ||
| + | <source lang=cpp> | ||
| + | connect( ui->monBouton, SIGNAL( clicked() ), this, SLOT( monAction() )); | ||
| + | </source> | ||
| + | |||
| + | {{Rouge|Attention}}, il faut utiliser l'adresse de l'objet, donc si vous n'utilisez pas de pointeur : | ||
| + | &monObjet | ||
| + | |||
| + | <source lang=cpp> | ||
| + | .... | ||
| + | Lampe maLampe; | ||
| + | .... | ||
| + | connect( ui->monBouton, SIGNAL( clicked() ), &maLampe , SLOT( monAction() )); | ||
| + | </source> | ||
| + | |||
| + | |||
| + | |||
={{Rouge|graphisme}}= | ={{Rouge|graphisme}}= | ||
| Ligne 4 : | Ligne 32 : | ||
On utilise la méthode setStyleSheet : | On utilise la méthode setStyleSheet : | ||
| − | <source lang= | + | <source lang=cpp> |
monBouton.setStyleSheet("background-color: black;"); | monBouton.setStyleSheet("background-color: black;"); | ||
</source> | </source> | ||
| − | Dans une application graphique QT classique, l'objet {Rouge|ui}} représente le "conteneur" des | + | Dans une application graphique QT classique, l'objet {{Rouge|ui}} représente le "conteneur" des widgets. On aura donc : |
| − | <source lang= | + | <source lang=cpp> |
ui->myPushButton->setStyleSheet("background-color: red;"); | ui->myPushButton->setStyleSheet("background-color: red;"); | ||
</source> | </source> | ||
La liste des couleurs prédéfinies se trouve sur [http://doc.qt.io/qt-5/qt.html#GlobalColor-enum le site de documentation de QT]. | La liste des couleurs prédéfinies se trouve sur [http://doc.qt.io/qt-5/qt.html#GlobalColor-enum le site de documentation de QT]. | ||
| + | |||
| + | |||
| + | Pour choisir dans l'espace RGB la couleur désirée, on peut faire de la façon suivante : | ||
| + | <source lang=cpp> | ||
| + | QString style = "background-color: rgb(%1, %2, %3);"; | ||
| + | ui->myPushButton->setStyleSheet(style.arg(valRouge).arg(valeurVerte).arg(valeurBleu)); | ||
| + | </source> | ||
| + | |||
| + | ={{Rouge|Classe}}= | ||
| + | |||
| + | =={{Bleu|attributs}}== | ||
| + | |||
| + | Lorsqu'on définit sa propre classe, il convient d'initialiser les attributs. | ||
| + | Ceci peut-être fait de 2 façons : | ||
| + | |||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | | Valeur initiale fixe || Valeur initiale variable | ||
| + | |- | ||
| + | | | ||
| + | <source lang=cpp> | ||
| + | class MaClasse | ||
| + | { | ||
| + | public : | ||
| + | MaClasse(); // constructeur | ||
| + | |||
| + | private : | ||
| + | // l'attribut x est initialisé à la valeur 5 | ||
| + | int x = 5; | ||
| + | |||
| + | } | ||
| + | </source> | ||
| + | || | ||
| + | <source lang=cpp> | ||
| + | class MaClasse | ||
| + | { | ||
| + | public : | ||
| + | MaClasse(int _x); // constructeur | ||
| + | |||
| + | private : | ||
| + | // l'attribut x sera initialisé par le constructeur | ||
| + | int x; | ||
| + | } | ||
| + | |||
| + | // constructeur avec initialisation de l'attribut x : | ||
| + | MaClasse::MaClasse(int _x) | ||
| + | { | ||
| + | x = _x; | ||
| + | } | ||
| + | </source> | ||
| + | |||
| + | |- | ||
| + | | | ||
| + | <source lang=cpp> | ||
| + | #include "maclasse.h> | ||
| + | |||
| + | MaClasse objet1; | ||
| + | </source> | ||
| + | || | ||
| + | <source lang=cpp> | ||
| + | #include "maclasse.h> | ||
| + | |||
| + | MaClasse objet2(5); | ||
| + | </source> | ||
| + | |} | ||
| + | |||
| + | |||
| + | Un attribut peut bien évidemment être de n'importe quel type, en particulier d'une de vos autres classes. | ||
| + | Dans ce cas, on utilisera un pointeur sur l'objet. | ||
| + | |||
| + | ex : | ||
| + | |||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | | | ||
| + | <source lang=cpp> | ||
| + | class FirstClasse | ||
| + | { | ||
| + | public : | ||
| + | FirstClasse(); //constructeur | ||
| + | private : | ||
| + | } | ||
| + | |||
| + | FirstClasse::FirstClasse() | ||
| + | { | ||
| + | } | ||
| + | |||
| + | class SecondeClasse | ||
| + | { | ||
| + | public : | ||
| + | SecondeClasse(FirstClasse * _obj1); // constructeur | ||
| + | private : | ||
| + | FirstClasse * obj1; // pointeur sur un objet de la classe FirstClasse | ||
| + | } | ||
| + | |||
| + | //initialisation de obj1 dans le constructeur | ||
| + | SecondeClasse::SecondeClasse(FirstClasse * _obj1) | ||
| + | { | ||
| + | obj1 = _obj1; | ||
| + | } | ||
| + | </source> | ||
| + | || | ||
| + | |||
| + | <source lang=cpp> | ||
| + | |||
| + | // en général dans un header d'une classe : | ||
| + | #include .... | ||
| + | |||
| + | FirstClasse * monFirstObjet; | ||
| + | SecondeClasse * monSecondeObjet; | ||
| + | |||
| + | |||
| + | |||
| + | // et en général dans le constructeur de la classe : | ||
| + | .... | ||
| + | |||
| + | monFirstObjet = new FirstClasse(); // instanciation de la classe FirstClasse | ||
| + | monSecondeObjet = new SecondeClasse(monFirstObjet); // instanciation de la classe SecondeClasse | ||
| + | |||
| + | ... | ||
| + | </source> | ||
| + | |} | ||
Version actuelle datée du 12 novembre 2017 à 17:16
Sommaire
signal/slot
La page signal&slots de la documentation QT peut être intéressante à consulter.
relier signal et slot
On utilise la fonction connect :
connect( objet émetteur, signal émis , objet récepteur, signal reçu );
ex :
connect( ui->monBouton, SIGNAL( clicked() ), this, SLOT( monAction() ));
Attention, il faut utiliser l'adresse de l'objet, donc si vous n'utilisez pas de pointeur :
&monObjet
....
Lampe maLampe;
....
connect( ui->monBouton, SIGNAL( clicked() ), &maLampe , SLOT( monAction() ));
graphisme
Modifier la couleur d'un bouton
On utilise la méthode setStyleSheet :
monBouton.setStyleSheet("background-color: black;");
Dans une application graphique QT classique, l'objet ui représente le "conteneur" des widgets. On aura donc :
ui->myPushButton->setStyleSheet("background-color: red;");
La liste des couleurs prédéfinies se trouve sur le site de documentation de QT.
Pour choisir dans l'espace RGB la couleur désirée, on peut faire de la façon suivante :
QString style = "background-color: rgb(%1, %2, %3);";
ui->myPushButton->setStyleSheet(style.arg(valRouge).arg(valeurVerte).arg(valeurBleu));
Classe
attributs
Lorsqu'on définit sa propre classe, il convient d'initialiser les attributs. Ceci peut-être fait de 2 façons :
| Valeur initiale fixe | Valeur initiale variable |
class MaClasse
{
public :
MaClasse(); // constructeur
private :
// l'attribut x est initialisé à la valeur 5
int x = 5;
}
|
class MaClasse
{
public :
MaClasse(int _x); // constructeur
private :
// l'attribut x sera initialisé par le constructeur
int x;
}
// constructeur avec initialisation de l'attribut x :
MaClasse::MaClasse(int _x)
{
x = _x;
}
|
#include "maclasse.h>
MaClasse objet1;
|
#include "maclasse.h>
MaClasse objet2(5);
|
Un attribut peut bien évidemment être de n'importe quel type, en particulier d'une de vos autres classes.
Dans ce cas, on utilisera un pointeur sur l'objet.
ex :
class FirstClasse
{
public :
FirstClasse(); //constructeur
private :
}
FirstClasse::FirstClasse()
{
}
class SecondeClasse
{
public :
SecondeClasse(FirstClasse * _obj1); // constructeur
private :
FirstClasse * obj1; // pointeur sur un objet de la classe FirstClasse
}
//initialisation de obj1 dans le constructeur
SecondeClasse::SecondeClasse(FirstClasse * _obj1)
{
obj1 = _obj1;
}
|
// en général dans un header d'une classe :
#include ....
FirstClasse * monFirstObjet;
SecondeClasse * monSecondeObjet;
// et en général dans le constructeur de la classe :
....
monFirstObjet = new FirstClasse(); // instanciation de la classe FirstClasse
monSecondeObjet = new SecondeClasse(monFirstObjet); // instanciation de la classe SecondeClasse
...
|