Cours:QT : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Rouge|graphisme}})
m
 
(5 révisions intermédiaires par le même utilisateur non affichées)
Ligne 6 : Ligne 6 :
 
=={{Bleu|relier signal et slot}}==
 
=={{Bleu|relier signal et slot}}==
  
On utilise la fonction {Rouge|connect}} :
+
On utilise la fonction {{Rouge|connect}} :
  
 
  connect( objet émetteur, signal émis , objet récepteur, signal reçu );
 
  connect( objet émetteur, signal émis , objet récepteur, signal reçu );
Ligne 70 : Ligne 70 :
 
private :
 
private :
 
   // l'attribut x est initialisé à la valeur 5
 
   // l'attribut x est initialisé à la valeur 5
   int x{5};
+
   int x = 5;
  
 
}
 
}
Ligne 88 : Ligne 88 :
 
// constructeur avec initialisation de l'attribut x :
 
// constructeur avec initialisation de l'attribut x :
 
MaClasse::MaClasse(int _x)
 
MaClasse::MaClasse(int _x)
                  : x{_x}
 
 
{
 
{
 +
  x = _x;
 
}
 
}
 
</source>
 
</source>
Ligne 104 : Ligne 104 :
 
#include "maclasse.h>
 
#include "maclasse.h>
  
MaClasse objet2{5};
+
MaClasse objet2(5);
 
</source>
 
</source>
 
|}
 
|}
Ligne 110 : Ligne 110 :
  
 
Un attribut peut bien évidemment être de n'importe quel type, en particulier d'une de vos autres classes.
 
Un attribut peut bien évidemment être de n'importe quel type, en particulier d'une de vos autres classes.
Dans ce cas, on utilisera au besoin une référence sur l'objet.
+
Dans ce cas, on utilisera un pointeur sur l'objet.
  
 
ex :
 
ex :
Ligne 121 : Ligne 121 :
 
{
 
{
 
public :
 
public :
   FirstClasse(float _y); //constructeur
+
   FirstClasse(); //constructeur
 
private :
 
private :
  float x{2.5}; //initialisation de x
 
  float y;
 
 
}
 
}
  
//initialisation de y dans le constructeur
+
FirstClasse::FirstClasse()
FirstClasse::FirstClasse(float _y)
 
                        : y{_y}
 
 
{
 
{
 
}
 
}
Ligne 136 : Ligne 132 :
 
{
 
{
 
public :
 
public :
   SecondeClasse(FirstClasse & _obj1); // constructeur
+
   SecondeClasse(FirstClasse * _obj1); // constructeur
 
private :
 
private :
   FirstClasse & obj1;    //
+
   FirstClasse * obj1;    // pointeur sur un objet de la classe FirstClasse
  FirstClasse obj2{1.2}; // initialisation de obj2
 
 
}
 
}
  
 
//initialisation de obj1 dans le constructeur
 
//initialisation de obj1 dans le constructeur
SecondeClasse::SecondeClasse(FirstClasse & _obj1)
+
SecondeClasse::SecondeClasse(FirstClasse * _obj1)
                            : obj1{_obj1}
 
 
{
 
{
 +
  obj1 = _obj1;
 
}
 
}
 
</source>
 
</source>
Ligne 151 : Ligne 146 :
  
 
<source lang=cpp>
 
<source lang=cpp>
 +
 +
// en général dans un header d'une classe :
 
#include ....
 
#include ....
  
FirstClasse monFirstObjet{6};
+
FirstClasse * monFirstObjet;
SecondeClasse monSecondeObjet{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>
 
</source>
 
|}
 
|}

Version actuelle datée du 12 novembre 2017 à 17:16

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

...