IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

execution d'une fenetre avec QPushbutton


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 9
    Points
    9
    Par défaut execution d'une fenetre avec QPushbutton
    Bonjour, je suis débutant en Qt et je voudrai créer une fenetre (fenetreA) avec deux boutons, l'un pour quitter (il marche), et un second pour ouvrir une nouvelle fenetre (fenetreB).
    Voici mon code de la première fenetre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    #include <QApplication>
    #include <QHBoxLayout>
    #include <QPushButton>
    #include <QtGui>
     
    int main( int argc, char **argv )
    {
        QApplication app(argc, argv);
     
        QWidget *window = new QWidget;
        window->setWindowTitle("fenetre A");
        window->setGeometry(400, 200, 400, 200);
        QPushButton *closebutton = new QPushButton("Quit");
        QPushButton *openbutton = new QPushButton("fenetreB");
     
     
     
        QObject::connect(closebutton, SIGNAL(clicked()),
                         &app, SLOT(quit()));
     
        QObject::connect(openbutton, SIGNAL(clicked()),
                         &app, SLOT(???));
     
     
        window->setLayout(Layout);
        window->show();
     
        return app.exec();
    }
    y a-t-il une fonction qui permette d'ouvrir une nouvelle fenetre que l'on peut mettre à la place des "???" ds connect?

    voici celui de la seconde fenetre(tout ce qu'il y a de plus simple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <QApplication>
    #include <QLabel>
     
    int (main(int argc, char **argv)
    {
      QApplication app(argc, argv);
       QLabel *label = new QLabel("Fenetre B");
       label->show();
       return app.exec();
    }
    j'ai lu qu'il ne fallait pas utiliser la fonction GoTo.
    si ce n'est pas possible avec une simple fonction pouvez-vous me montrez un code ou me donner des piste pour réussir à lier les deux fenetre?
    Merci d'avance

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    Salut,
    Tu peux créer un slot toi même
    genre, dans ce post: http://www.developpez.net/forums/sho...44&postcount=9
    Il y a une méthode f() que tu pourras mettre à la place de tes "???".

    Dans le fichier.h, il faut que tu déclares ta méthode comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private slots:
       void f();
    (je reprends le nom de la méthode citée dans le post que je t'ai mis en liens)

    EDIT: FENETREFILLE dans le lien est aussi à remplacer par ta propre classe FenetreB.

    Je suis débutant aussi j'espère ne pas te dire de bétise

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    j'ai créer un fichier .h mais je doit avoir un problème quelque part, j'arrive à compiler, mais la fenetre B ne s'affiche pas quand je clique sur le bouton ds la fenetre A.
    code de la fenetre A .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <QApplication>
    #include <QHBoxLayout>
    #include <QPushButton>
    #include <QtGui>
    #include "essai.h"
     
     
    int main( int argc, char **argv )
    {
        QApplication app(argc, argv);
     
        QWidget *window = new QWidget;
        window->setWindowTitle("fenetre a");//titre de la fenetre
        window->setGeometry(400, 200, 400, 200);//dimensions de la fenetre
        QPushButton *closebutton = new QPushButton("Quit");
        QPushButton *openbutton = new QPushButton("fenetre b");
     
        QObject::connect(closebutton, SIGNAL(clicked()),
                         &app, SLOT(quit()));
     
        QObject::connect(openbutton, SIGNAL(clicked()),
                         &app, SLOT());
     
     
        QVBoxLayout *Layout = new QVBoxLayout;
        Layout->addWidget(openbutton);
        Layout->addWidget(closebutton);
     
        window->setLayout(Layout);
        window->show();
     
        return app.exec();
    }
     
    void f()
    {
     
        QWidget  *FenetreB = new QWidget;
        FenetreB ->show();
    }
    et le .h de la seconde fenetre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef ESSAI_H
    #define ESSAI_H
     
    class essai
    {
       public:
       QLabel *label;
     
       private slots:
       void f();
    };
     
    #endif
    merci d'avance

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QObject::connect(openbutton, SIGNAL(clicked()),
                         &app, SLOT(???));
    Il n'y a rien dans ton slot? Le problème dois venir de la, tu dois y appeler le slot que tu viens de créer.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    escuse moi j'ai du faire une faut de frappe, je l'avais bien mis quand j'ai testé le programme, mais ça ne marche pas, voila le programme sans oubli j'espère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <QApplication>
    #include <QHBoxLayout>
    #include <QPushButton>
    #include <QtGui>
    #include "essai.h"
     
     
    int main( int argc, char **argv )
    {
        QApplication app(argc, argv);
     
        QWidget *window = new QWidget;
        window->setWindowTitle("fenetre a");//titre de la fenetre
        window->setGeometry(400, 200, 400, 200);//dimensions de la fenetre
        QPushButton *closebutton = new QPushButton("Quit");
        QPushButton *openbutton = new QPushButton("fenetre b");
     
        QObject::connect(closebutton, SIGNAL(clicked()),
                         &app, SLOT(quit()));
     
        QObject::connect(openbutton, SIGNAL(clicked()),
                         &app, SLOT(f()));
     
     
        QVBoxLayout *Layout = new QVBoxLayout;
        Layout->addWidget(openbutton);
        Layout->addWidget(closebutton);
     
        window->setLayout(Layout);
        window->show();
     
        return app.exec();
    }
     
    void f()
    {
     
        QWidget  *FenetreB = new QWidget;
        FenetreB ->show();
    }

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    Ta méthode f() n'est pas une Qapp.
    Essaie donc de remplacer "&app" par "this" peut être (j'ai pas encore vraiment fait de gestion de slot encore, donc je ne te garantis pas que c'est ça :p)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        QObject::connect(openbutton, SIGNAL(clicked()),
                         this, SLOT(f()));

    retiens moi au courant

    EDIT: Essaies aussi d'ajouter Q_OBJECT dans ton header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class essaie : public QWidget
    {
          Q_OBJECT
    	public:
    ...

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 110
    Points
    110
    Par défaut
    Salut,

    Dans le cas ou ton probleme ne serait pas encore resolu, je te conseille l'organisation suivante :
    - classe principale (avec la fonction main) qui initialise et affiche ta fenetreA
    - classe secondaire "essai" qui s'occupera de creer ta fenetre B.
    Pour utiliser le concept signal/slot de Qt il FAUT ajouter la macro Q_OBJECT dans le .h de ta classe pour que ton utilitaire de compilation cree un fichier *.moc correspondant a ta classe "essai" que le programme utilisera ensuite pour faire les differents liens.
    Ceci etant dit:
    1. dans ta fonction main, cree une instance de ta classe essai :
    Essai* e = new Essai OU Essai * e = new Essai(window), auquel cas la fenetreA (qui dans ton code est pointee par "window") sera "parente" de ta fenetre B.
    2. Dans ton slot Essai::f(), tu initialises et montre la fenetre comme tu l'as fait.
    3. Tu connectes ton bouton a ton slot dans ta fonction main :
    QObject::connect(openbutton, SIGNAL(clicked()),
    e, SLOT(f()));
    Ca devrait fonctionner comme ca.
    J'espere avoir ete assez clair.

    Bon courage

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci à vous deux, ça marche.
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/09/2005, 14h34
  2. [Eclipse 3.1] ouvrir une fenetre avec un bouton
    Par Nanoulov dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 01/08/2005, 13h33
  3. Detection d'une fenetre avec la souris
    Par vivi2701 dans le forum C++
    Réponses: 6
    Dernier message: 09/06/2005, 13h37
  4. Probleme d'execution d'une requete avec un Count
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 23/06/2004, 10h33
  5. Execution d'une procedure avec TNotifyEvent;
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2003, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo