Cours:QT

De troyesGEII
Révision datée du 12 novembre 2017 à 17:16 par Bjacquot (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

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

...