Cours:QT : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Rouge|graphisme}})
({{Bleu|attributs}})
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
 
//initialisation de y dans le constructeur
FirstClasse::FirstClasse(float _y)
+
FirstClasse::FirstClasse()
                        : y{_y}
 
 
{
 
{
 
}
 
}
Ligne 136 : Ligne 133 :
 
{
 
{
 
public :
 
public :
   SecondeClasse(FirstClasse & _obj1); // constructeur
+
   SecondeClasse(FirstClasse * _obj1); // constructeur
 
private :
 
private :
   FirstClasse & obj1;    //
+
   FirstClasse * obj1;    //
  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 153 : Ligne 149 :
 
#include ....
 
#include ....
  
FirstClasse monFirstObjet{6};
+
FirstClasse * monFirstObjet;
SecondeClasse monSecondeObjet{monFirstObjet};
+
monFirstObjet = new FirstClasse();
 +
SecondeClasse * monSecondeObjet;
 +
monSecondeObjet = new SecondeClasse(monFirstObjet);
 +
 
 +
...
 
</source>
 
</source>
 
|}
 
|}

Version du 12 novembre 2017 à 11:13

signal/slot

La page signal&slots de la documentation QT peut être intéressante à consulter.

relier signal et slot

On utilise la fonction {Rouge|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 :
}

//initialisation de y dans le constructeur
FirstClasse::FirstClasse()
{
}

class SecondeClasse
{
public :
  SecondeClasse(FirstClasse * _obj1); // constructeur
private :
  FirstClasse * obj1;     //
}

//initialisation de obj1 dans le constructeur
SecondeClasse::SecondeClasse(FirstClasse * _obj1)
{
   obj1 = _obj1;
}
#include ....

FirstClasse * monFirstObjet;
monFirstObjet = new FirstClasse();
SecondeClasse * monSecondeObjet;
monSecondeObjet = new SecondeClasse(monFirstObjet);

...