Qt: les bases

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Dyazz

Haskell & a mp; amp; amp;
V
Dec 28, 2009
618
0
922
En voilà une bonne nouvelle des interfaces graphique tout d'abord télécharger Qt creator (l'ide) avec les libs qui vont avec (Qt 4.6.2 pour moi)
je vais me fixé un projet qui à la fin de ce tuto vous serais faire créer un boutton qui permet de quitter la fenêtre tout d'abord vous devez savoir que Qt est à fond dans l'héritage tout les classes sont hérités la classe de base est QWidget (qui est la fenêtre)
voilà un bon shéma (site du zero)
103326.png


donc il faut savoir que vous devez inclure un header par classe chaque header fais partit d'une famille de dll il faut savoir que Qt n'est pas que graphique c'est aussi un module network (sdl etc...) core (coeur)etc... donc on a QtGui.dll QtCore.dll (il faudra les fournir avec votre programme)

pour créer votre boutton vous devez inclure QPushButton (souvent les includes on le même nom que les classes)
donc le constructeur est QPushButton (j'utilises toujours les pointeurs quand j'en a l'occasion)
donc pour créer un boutton
Code:
QPushButton* boutton = new QPushButton ("texte du boutton");
ah oui Qt surcharge presque toutes ses classes là j'apprends juste à créer un bouton normal
donc une fois que le bouton est crée on a un problème le bouton est la fenêtre (voilà mon code pour que vous suiviez avec moi)
j'ai oublier que vous devez aussi inclure <QApplication> et aussi le programme commence par le constructeur QApplication et le prototype de retour est QApplication::exec(); (si l'objet se nomme app ça donne return app.exec();)

Code:
#include <QPushButton>
#include <QApplication>
int main (int argc, char **argv){
     QApplication (argc, argv);
     QPushButton* boutton = new QPushButton ("Exit");
     return app.exec();

Pour resoudre ça je crée au prealable une fenêtre donc de type QWidget
Code:
#include <QPushButton>
#include <QApplication>


int main (int argc, char **argv){
     QApplication app (argc, argv);
     QWidget* fenetre = new QWidget();
     QPushButton* boutton = new QPushButton ("Exit");
     fenetre->show();
     return app.exec();
 }

le boutton s'affiche pas pourquoi ? parce qu'il faut créer des layout qui eux gère les boutons la classe est QHBoxLayout je vous laisse deviner le constructeur (on aurait pu faire autrement en indiquant la fenêtre parente mais j'ai décidé de faire à ma manière)
donc on crée l'objet QHBoxLayout et on crée nos widget (boutton) et pour les ajouté au layout la méthode est QHBoxLayout::addWidget(&QWidget) (je vous rappel qu'un boutton est un widget car il hérite de QWidget)
donc je vous ai appris à utiliser les methode maintenant on va ajoute le boutton (vous pouvez en ajouter plusieurs)
et pour indiquer à la fenêtre d'utiliser la layout la methode est QWidget::addLayout(&layout); (comme vous êtes expert vous devinez le &)
voilà mon code
Code:
#include <QPushButton>
#include <QApplication>


int main (int argc, char **argv){
     QApplication app (argc, argv);
     QWidget* fenetre = new QWidget();
     QPushButton* boutton = new QPushButton ("Exit");
     QHBoxLayout *layout = new QHBoxLayout;
     layout->addWidget(boutton);
     fenetre->setLayout(layout);
     fenetre->show();
     return app.exec();
 }

vous allez me dire ça fais rien !!!

bon maintenant je vais vous expliquez un truc les QWidget envoie des signaux (admet on quand on clique sur le boutton ça envoie le signal cliquer)
et il faut que quand on reçoit ce signal on fasse quelque chose et ce quelque chose s'appel un slot (c'est une methode)
la syntaxe est QWidget::connect(&lemetteurdusignal), SIGNAL(clicked()), &receveurdusignal, SLOT(quit()))(la methode) dans mon code ça donne
Code:
#include <QPushButton>
#include <QApplication>
#include <QHBoxLayout>

int main (int argc, char **argv){
     QApplication app (argc, argv);
     QWidget* fenetre = new QWidget();
     QPushButton* boutton = new QPushButton ("Exit");
     QHBoxLayout *layout = new QHBoxLayout;
     QWidget::connect(boutton, SIGNAL(clicked()), &app, SLOT(quit()));
     layout->addWidget(boutton);
     fenetre->setLayout(layout);
     fenetre->show();
     return app.exec();
 }

fiou on atteint notre objectif enjoy à tous