Cours:QT : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Bleu|attributs}})
m
 
(8 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}}=
 +
 +
=={{Bleu|Modifier la couleur d'un bouton}}==
 +
 +
On utilise la méthode setStyleSheet :
 +
<source lang=cpp>
 +
monBouton.setStyleSheet("background-color: black;");
 +
</source>
 +
 +
Dans une application graphique QT classique, l'objet {{Rouge|ui}} représente le "conteneur" des widgets. On aura donc :
 +
<source lang=cpp>
 +
ui->myPushButton->setStyleSheet("background-color: red;");
 +
</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].
 +
 +
 +
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}}=
 
={{Rouge|Classe}}=
  
Ligne 19 : 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 37 : 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 53 : Ligne 104 :
 
#include "maclasse.h>
 
#include "maclasse.h>
  
MaClasse objet2{5};
+
MaClasse objet2(5);
 
</source>
 
</source>
 
|}
 
|}
Ligne 59 : 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 70 : 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 85 : 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 100 : 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;
</source>
 
|}
 
  
={{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}}==
+
// et en général dans le constructeur de la classe :
 +
....
  
On utilise la fonction {Rouge|connect}} :
+
monFirstObjet = new FirstClasse();                    // instanciation de la classe FirstClasse
 
+
monSecondeObjet = new SecondeClasse(monFirstObjet);   // instanciation de la classe SecondeClasse
connect( objet émetteur, signal émis , objet récepteur, signal reçu );
 
  
ex :
+
...
<source lang=cpp>
 
connect( ui->monBouton, SIGNAL( clicked() ), this, SLOT( monAction() ));
 
 
</source>
 
</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}}=
 
 
 
=={{Bleu|Modifier la couleur d'un bouton}}==
 
 
 
On utilise la méthode setStyleSheet :
 
<source lang=cpp>
 
monBouton.setStyleSheet("background-color: black;");
 
</source>
 
 
 
Dans une application graphique QT classique, l'objet {{Rouge|ui}} représente le "conteneur" des widgets. On aura donc :
 
<source lang=cpp>
 
ui->myPushButton->setStyleSheet("background-color: red;");
 
</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].
 

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

...