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 :

Lancement d'une fonction.


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut Lancement d'une fonction.
    Bonsoir à tous,

    J'ai un petit problème. En effet, j'aimerais qu'à la fermeture d'une fenetre, ma fenêtre principale affiche quelque chose. Pour cela, (comme vous le verrez sur le code) je passe par la modification d'un bête booléen qui est déclaré dans ma classe comme attribut. Je fais la transformation de ce dernier dans un slot qui est appelé si on appuie sur le bouton correspondant. Mais, j'ai l'impression qu'il n'est pas modifié.

    Voila le code :

    Mon .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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #ifndef DEF_FENACCUEIL
    #define DEF_FENACCUEIL
     
    #include <iostream>
    #include <QApplication>
    #include <QGraphicsView>
    #include <QGraphicsScene>
    #include <QGraphicsItem>
     
    #include <QColor>
    #include <QPainter>
    #include <QStyleOption>
    #include <QKeyEvent>
    #include <QImage>
    #include <math.h>
     
    #include <time.h>
     
    #include <QMainWindow>
    //#include <QMdiArea>
    #include <QMenuBar>
    #include <QAction>
    #include <QBrush>
     
    #include <QDialog>
    #include <QWidget>
    #include <QLabel>
    #include <QPushButton>
    #include <QVBoxLayout>
    #include <QProgressBar>
    #include <QGroupBox>
    #include <QFrame>
    #include <QSpinBox>
    #include <QFormLayout>
     
    #include "Terrain.h"
     
     
    class FenetreAccueil : public QMainWindow
    {
    	Q_OBJECT
    	private:
    		QGraphicsView *v;/* vue */
    		Terrain *s;/* scene */
    		QWidget * principale;
    		QProgressBar *barre;
    		QDialog * fenetreprog;
     
    		QDialog * Choix_jeux;
     
    		QAction *actionNouveauJeu;
     
    		bool ferme;
     
    	public:
    		FenetreAccueil();
    		void barreProgression();
    		bool fenChoixJeux();
     
    	public slots:
    		void NouveauJeu();
    		void PageCommande();
    		void Accueil();
    		void Aide();
    		void ChangeValue(int);
    		void FermeFenetre();
     
    };
     
     
     
    #endif
    Et mon .cpp. Pour plus de clarté je ne vous ai pas tout mis, car le fichier est assez gros. Je ne vous met que les fonctions qui bloquent.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
     
    	/* slot pour le bouton Nouveau Jeu*/
    void FenetreAccueil :: NouveauJeu()
    {
    	QVBoxLayout *layout = new QVBoxLayout;
    	actionNouveauJeu->setEnabled(false);
    	if(fenChoixJeux())
    	{
    		barreProgression();
    		jeu(v,s);
     
    		layout->addWidget(v);
    		principale->setLayout(layout);
    	}
     
    }
     
    void FenetreAccueil :: barreProgression()
    {
    	fenetreprog = new QDialog();
    	QGroupBox *groupbox = new QGroupBox(fenetreprog);
     
    	QVBoxLayout *group_layout = new QVBoxLayout(groupbox);
    	barre = new QProgressBar(groupbox);
    	int valeur = 0;
     
    	fenetreprog->setWindowTitle("Fenetre de chargement");
    	fenetreprog->setGeometry(405,200,300,90);
     
    	groupbox->setFixedSize(300,90);
    	groupbox->setTitle("Chargement");
    	groupbox->setFlat(1);
     
    	barre->setMaximum(100);
    	barre->setMinimum(0);
    	barre->setOrientation(Qt::Horizontal);
    	barre->setFixedSize(280, 20);
     
    	connect(barre, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
     
    	group_layout->addWidget(barre);
    	groupbox->setLayout(group_layout);
     
    	fenetreprog->show();
     
    	connect(barre, SIGNAL(valueChanged(int)), this, SLOT(ChangeValue(int)));	
     
    	for(valeur = 0; valeur <= 101; valeur ++)
    	{
    		barre->setValue(valeur);
    	}
    	v->activateWindow();
    	v->setFocusPolicy(Qt::StrongFocus);
    	v->setFocus();
    }
     
    bool FenetreAccueil :: fenChoixJeux()
    {
    	Choix_jeux = new QDialog();
    	QFrame *frame = new QFrame(Choix_jeux);
    	QGroupBox *group_box_multi = new QGroupBox(Choix_jeux);
    	QGroupBox *group_box_solo = new QGroupBox(Choix_jeux);
    	QFormLayout * layout_solo = new QFormLayout();
    	QFormLayout * layout_multi = new QFormLayout();
    	QSpinBox * liste_joueur = new QSpinBox();
    	QSpinBox * liste_tank_solo = new QSpinBox();
    	QSpinBox * liste_tank_multi = new QSpinBox();
    	QSpinBox * liste_obstacles_solo = new QSpinBox();
    	QSpinBox * liste_obstacles_multi = new QSpinBox();
    	QLabel * label_liste_joueur = new QLabel();
    	QLabel * label_liste_tank_solo = new QLabel();
    	QLabel * label_liste_tank_multi = new QLabel();
    	QLabel * label_liste_obstacles_solo = new QLabel();
    	QLabel * label_liste_obstacles_multi = new QLabel();
    	QPushButton * bouton_Go = new QPushButton("Go!!!",Choix_jeux);
    	QPushButton * bouton_Annuler = new QPushButton("Annuler", Choix_jeux);
    	ferme = false;
     
    	Choix_jeux->move(270, 120);
    	Choix_jeux->setFixedSize(400, 300);
    	Choix_jeux->setWindowTitle("Faites votre jeu !");
    	Choix_jeux->setWindowIcon(QIcon(".//Images//Icone_principal.jpg"));
    	Choix_jeux->setModal(true);
     
    	frame->setFrameShape(QFrame :: StyledPanel);
    	frame->setGeometry(20,20, 360, 260);
    	frame->setFrameShadow(QFrame :: Plain);
    	frame->setLineWidth(2);
    	frame->setMidLineWidth(1);
     
    	group_box_solo->setGeometry(30, 50, 167, 180);
    	group_box_solo->setCheckable(true);
    	group_box_solo->setTitle("Mode un joueur");
     
    	liste_tank_solo->setRange(1, 8);
    	liste_obstacles_solo->setRange(0,25);
     
    	label_liste_tank_solo->setText("Nombre de tanks au départ :");
    	label_liste_obstacles_solo->setText("Nombre d'obstacles au départ");
     
    	group_box_multi->setGeometry(203,50, 167, 180);
    	group_box_multi->setCheckable(true);
    	group_box_multi->setTitle("Mode multijoueur");
     
    	liste_joueur->setRange(2, 8);
    	liste_tank_multi->setRange(1, 8);
    	liste_obstacles_multi->setRange(0, 20);
     
    	label_liste_joueur->setText("Choississez le nombre de particpants");
    	label_liste_tank_multi->setText("Nombre de tanks au départ :");
    	label_liste_obstacles_multi->setText("Nombre d'obstacles au départ");
     
    	layout_solo->addRow(label_liste_tank_solo);
    	layout_solo->addRow(liste_tank_solo);
     
    	layout_solo->addRow(label_liste_obstacles_solo);
    	layout_solo->addRow(liste_obstacles_solo);
     
    	layout_multi->addRow(label_liste_joueur);
    	layout_multi->addRow(liste_joueur);
     
    	layout_multi->addRow(label_liste_tank_multi);
    	layout_multi->addRow(liste_tank_multi);
     
    	layout_multi->addRow(label_liste_obstacles_multi);
    	layout_multi->addRow(liste_obstacles_multi);
     
    	group_box_solo->setLayout(layout_solo);
    	group_box_multi->setLayout(layout_multi);
     
    	bouton_Go->move(105,250);
    	bouton_Annuler->move(220,250);
     
    	Choix_jeux->show();
     
    	connect(bouton_Go, SIGNAL(clicked()),this,SLOT(FermeFenetre()));
    	connect(bouton_Annuler, SIGNAL(clicked()), Choix_jeux, SLOT(close()));
     
    	return true;
     
    }
     
    void FenetreAccueil :: FermeFenetre()
    {
    	Choix_jeux->close();
    	//ferme = true;
    }
    Donc si l'un d'entre vous a un idée ou même une meilleure manière de faire : Je suis preneur.
    Par ailleurs, j'espère ne pas me tromper si je dis que les entiers ou booléens déclarés dans la classe peut être modifier partout dans les fonctions de cette classe et que ce n'est pas ça l'erreur.
    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,
    Citation Envoyé par razonback Voir le message
    j'aimerais qu'à la fermeture d'une fenetre, ma fenêtre principale affiche quelque chose. Pour cela, (comme vous le verrez sur le code) je passe par la modification d'un bête booléen qui est déclaré dans ma classe comme attribut. Je fais la transformation de ce dernier dans un slot qui est appelé si on appuie sur le bouton correspondant. Mais, j'ai l'impression qu'il n'est pas modifié.
    Ne serait-ce pas plus simple d'utiliser des signaux ? Surtout si tes fenêtre sont des QDialog, il y a déjà tout ce qu'il faut...

    Par ailleurs, j'espère ne pas me tromper si je dis que les entiers ou booléens déclarés dans la classe peut être modifier partout dans les fonctions de cette classe
    Oui c'est le principe de la programmation objet...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    J'utilise déjà des signaux ou alors je n'est pas compris ce que tu veux dire...

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Mmm...
    Pourrais-tu préciser ce que tu veux faire exactement, et à quoi sert ton booléen ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    En fait mon booléen ne me sert qu'a entrer dans une autre fonction.
    Si tu regarde mon code, c'est dans la fonction nouveau jeu.
    Je le modifie pour afficher ce que je veux. Le problème est que je pense que soit le booléen n'est pas modifier dans le slot soit que le if n'est plus traité.

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bon je pense que dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void FenetreAccueil :: FermeFenetre()
    {
    	Choix_jeux->close();
    	//ferme = true;
    }
    tu voulais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void FenetreAccueil :: FermeFenetre()
    {
    	Choix_jeux->close();
    	ferme = true;
    }
    sinon comme ça je ne vois pas...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/04/2007, 12h48
  2. Réponses: 1
    Dernier message: 09/08/2006, 16h04
  3. Réponses: 5
    Dernier message: 18/07/2006, 17h03
  4. Post avec lancement d'une fonction JS
    Par Seth77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/07/2006, 14h31
  5. Réponses: 12
    Dernier message: 24/04/2006, 23h19

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