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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut QStackedWidget : changer le contenu d'une fenêtre lors d'un clic (mais pas la fenêtre)
    Hello tout le monde !

    Alors voilà, je débute en C++ et Qt, et j'aimerai que lorsque je clique sur un bouton, je reste dans la même fenêtre, mais le layout change (comme pour le web, lorsqu'on clique sur un lien, on garde la même fenêtre, mais la page change)

    Mes deux questions sont :

    1. Actuellement j'essaye d’utilisé QStackedWidget mais y a t-il un moyens plus approprié pour réaliser cela ?

    2. Le problème avec mon code, s'est que j'arrivais directement sur la fenêtre secondaire alors j'ai modifié quelques trucs...et maintenant j'arrive bien sur la fenêtre principale, mais lorsque je clique sur le bouton, rien ne se passe:

    Fenetre Principale .h
    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
    #ifndef FENETREPRINCIPALE_H
    #define FENETREPRINCIPALE_H
     
    #include <QtWidgets>
    #include "FenetreSecondaire.h"
     
    namespace Ui {
    class FenetrePrincipale;
    }
     
    class FenetrePrincipale : public QWidget
    {
        Q_OBJECT
     
    public:
        explicit FenetrePrincipale(QWidget *parent = 0);
        ~FenetrePrincipale();
     
    public slots:
        void changerPage();
     
    private:
        Ui::FenetrePrincipale *ui;
        QStackedWidget *m_stacked_widget;
        FenetreSecondaire *m_fenetre_secondaire;
    };
     
    #endif // FENETREPRINCIPALE_H
    Fenetre Principale .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
    #include "FenetrePrincipale.h"
    #include "ui_FenetrePrincipale.h"
     
    FenetrePrincipale::FenetrePrincipale(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::FenetrePrincipale)
    {
        ui->setupUi(this);
     
        m_stacked_widget = new QStackedWidget(this);
        m_fenetre_secondaire = new FenetreSecondaire(this);
     
        m_stacked_widget->addWidget(m_fenetre_secondaire);
     
        connect(ui->bouton, SIGNAL(clicked()), this, SLOT(changerPage()));
    }
     
    FenetrePrincipale::~FenetrePrincipale()
    {
        delete ui;
    }
     
    void FenetrePrincipale::changerPage()
    {
        m_stacked_widget->setCurrentWidget(m_fenetre_secondaire);
     
    }

    Fenetre Secondaire .h
    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
    #ifndef FENETRESECONDAIRE_H
    #define FENETRESECONDAIRE_H
     
    #include <QtWidgets>
     
    namespace Ui {
    class FenetreSecondaire;
    }
     
    class FenetreSecondaire : public QWidget
    {
        Q_OBJECT
     
    public:
        explicit FenetreSecondaire(QWidget *parent = 0);
        ~FenetreSecondaire();
     
    private:
        Ui::FenetreSecondaire *ui;
    };
     
    #endif // FENETRESECONDAIRE_H
    Fenetre Secondaire .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
    #include "FenetreSecondaire.h"
    #include "ui_FenetreSecondaire.h"
     
    FenetreSecondaire::FenetreSecondaire(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::FenetreSecondaire)
    {
        ui->setupUi(this);
    }
     
    FenetreSecondaire::~FenetreSecondaire()
    {
        delete ui;
    }

    Et enfin le main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "FenetrePrincipale.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        FenetrePrincipale w;
        w.show();
     
        return a.exec();
    }

    Merci par avence pour votre aide précieuse !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si ton but est de pouvoir basculer entre FenetrePrincipale et FenetreSecondaire au sein d'une même fenêtre, alors il te faut créer cette autre fenêtre à part, et c'est cette 3e fenêtre qui utilisera le QStackedWidget gérant les deux premières.
    Tu peux t'inspirer de l'exemple de la documentation où tu peux faire le parallèle :
    • firstPageWidget <=> FenetrePrincipale
    • secondPageWidget <=> FenetreSecondaire

    Le code qui est montré étant situé dans celui de la troisième.

    Remarque : #include <QtWidgets> inclut inutilement tous les fichiers qui font partie de ce module.
    Tu as seulement besoin d'inclure #include <QWidget> (héritage oblige), les deux déclarations en pointeurs de FenetreSecondaire et QStackedWidget peuvent se contenter de déclarations anticipées (forward declaration).
    Dernière modification par Invité ; 21/11/2016 à 21h10.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Ah oui génial, c’était exactement ça !

    Merci beaucoup aussi pour tes remarques, ça m'aide vraiment à m'améliorer

    Bonne continuation !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/10/2014, 15h27
  2. Réponses: 1
    Dernier message: 21/02/2014, 19h02
  3. Changer le contenu d'une fenêtre (JFrame)
    Par mikadev dans le forum Débuter
    Réponses: 1
    Dernier message: 01/01/2014, 00h27
  4. Changer le contenu d'une fenêtre
    Par TrexXx dans le forum Débuter
    Réponses: 3
    Dernier message: 27/05/2009, 08h16
  5. [WD9] Changer le contenu d'une fenêtre interne
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 15h02

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