Une deuxième QDialog?

Résolu
devil2407 Messages postés 23 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 12 janvier 2011 - 12 août 2008 à 15:33
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 14 août 2008 à 12:08
Salut à tous!
Je viens ici parce que je suis désespéré! J'ai passé la matinée à chercher comme ouvrir une deuxieme QDialog avec Qt.
En gros, j'ai une fenêtre principale qui appelle une QDialog dans laquelle j'ai la liste des règles de mon moteur d'inférence et je voudrais que sur clic du bouton "Ajouter" il m'ouvre une fenêtre contenant les champs "Regle" et "Fait" mais apparemment en déclarant celle-ci en QDialog, elle ne s'ouvre pas.

Deux QDialogs ne pourraient doc pas s'ouvrir en cascade?? Vous avez une idée?

Merci beaucoup!!


Dams

10 réponses

devil2407 Messages postés 23 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 12 janvier 2011
14 août 2008 à 11:46
C'est bon pour la deuxième QDialog Buno... je viens de m'apercevoir que j'avais oublié dans le FenetreAjMod.h la ligne Q_OBJECT....

Tout ce temps perdu à cause de ça!!
En tout cas merci beaucoup pour ton aide!

Devil
3
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
12 août 2008 à 16:50
Hello,
Je ne vois pas ce qui bloque: bien sûr que tu peux faire des dialogs en cascade...
Dans la fonction de ton bouton, tu fais un taDialog.show() (ou .exec()). Il faut, bien sûr, que ta dialog soit créée...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
devil2407 Messages postés 23 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 12 janvier 2011
12 août 2008 à 17:53
Merci pour ta réponse rapide Buno mais ca ne compile pas...voila ce que j'ai exactement comme code ca t'aidera peut etre :

FenetreRegles.cpp (hérite déjà d'un widget)

FenetreRegles::FenetreRegles(QWidget *parent = 0) : QDialog(parent)
{
PB_Ajouter = new QPushButton("Ajouter",this);
    PB_Ajouter->setToolTip("Ajouter une nouvelle règle") ;
    PB_Ajouter->setCursor(Qt::PointingHandCursor);
    PB_Ajouter->setIcon(QIcon("plus.png"));
    QObject::connect(PB_Ajouter, SIGNAL(clicked()), this, SLOT(OuvrirFenetreAj()));
}


void FenetreRegles::OuvrirFenetreAj()
{
     FenetreAjMod *Ajout = new FenetreAjMod(this);
     Ajout.exec();
}

FenetreRegles.h
class FenetreRegles : public QDialog // On hérite de QWidget (IMPORTANT)
{
    public:
            FenetreRegles(QWidget *parent);


    public slots:
            void OuvrirFenetreAj() ;
}

FenetreAjMod.cpp
FenetreAjMod::FenetreAjMod(QDialog *parent = 0) : QDialog(parent)
{
...
}


void FenetreAjMod::ouvrirDialogue()
{
...
}

FenetreAjMod.h
class FenetreAjMod : public QDialog // On hérite de QWidget (IMPORTANT)
{
    public:
            FenetreAjMod(QDialog *parent);
}

J'ai vérifié dans chaque unité j'ai bien les bons #include... donc je ne vois pas pourquoi ca ne s'ouvre pas tel quel!!
:'(
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
12 août 2008 à 18:11
ça ne compile pas dis-tu?
Je vois 2 choses:
- as-tu implémenté ton constructeur? Genre: FenetreAjMod(QDialog * parent){};
- Ajout->exec() et non "."

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
devil2407 Messages postés 23 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 12 janvier 2011
12 août 2008 à 18:19
Ben en fait dans ma premiere QDialog j'ai une fonction que j'appelle sur clic de bouton :

#include "FenetreAjMod.h"
void FenetreRegles::OuvrirFenetreAj()
{
     FenetreAjMod *Ajout = new FenetreAjMod(this);
     Ajout->exec();
}

et dans FenetreAjMod.h j'ai :

class FenetreAjMod : public QDialog 
{
    public:
            FenetreAjMod(QDialog *parent);
}

Pour le ->, si je le remplace par un ".", il me met une erreur de compilation.
Par contre je ne sais pas si j'ai fait la bonne déclaration pour ma deuxième QDialog... est-ce bien cela qu'il faut mettre si elle hérite d'une première QDialog?

Pour le .cpp :
FenetreAjMod::FenetreAjMod(QDialog *parent = 0) : QDialog(parent)

Pour le .h
class FenetreAjMod : public QDialog
{
    public:
            FenetreAjMod(QDialog *parent);
}

Dams
0
devil2407 Messages postés 23 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 12 janvier 2011
12 août 2008 à 18:21
Ca compile comme je l'ai codé. Mais lorsque je clique sur le bouton "Ajouter", rien ne s'affiche...pas même ma deuxième QDialog :'(
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
13 août 2008 à 09:31
Hello,
Alors moi, j'ai déclaré ceci dans mon .h

class FenetreAjMod : public QDialog
{
    public:
            FenetreAjMod(QDialog *parent=NULL):QDialog(parent){};
}

Avec l'appel dans le cpp:

void testQT::onClick(bool)
{
    FenetreAjMod * myDialog = new FenetreAjMod();
    myDialog->exec();
}

Sachant que dans ma fenêtre principal (testQT) j'ai un PushButton qui s'appelle "ok" et que, dans le contructeur de ma fenêtre principale, j'ai connecté l'appui sur le bouton à ma fonction d'affichage de ma 2e dialog:
QObject::connect(ok,SIGNAL(clicked(bool)),this,SLOT(onClick(bool)));

Et j'ai bien ma 2e dialog qui d'affiche au 1er plan quand j'appuie sur le bouton.

Est-ce que tu es sûr que tu passes dans la fonction quand tu clic qur ton bouton?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
devil2407 Messages postés 23 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 12 janvier 2011
14 août 2008 à 09:47
Effectivement, j'a placé un QMessageBox dans la fonction qui est censée m'ouvrir ma QDialog et même mon QMessageBox ne s'affiche pas donc le programme ne rentre pas dans ma fonction... pourquoi? ca c'est encore autre chose... l'appel me semble correct pourtant...

QObject::connect(PB_Ajouter, SIGNAL(clicked()), this, SLOT(OuvrirFenetreAj()));
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 août 2008 à 10:08
Petit souci: le prototype du signal "clicked" veut un booléen en paramètre. Donc il faut corriger ta ligne comme ceci:
QObject::connect(PB_Ajouter, SIGNAL(clicked(bool)), this, SLOT(OuvrirFenetreAj(bool)));

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 août 2008 à 12:08
Rhoooo....
C'est le truc tout bête et je n'y avais pas pensé...
Heureusement que tout s'explique

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous