Une deuxième QDialog? [Résolu]

devil2407 23 Messages postés mardi 18 septembre 2007Date d'inscription 12 janvier 2011 Dernière intervention - 12 août 2008 à 15:33 - Dernière réponse : BunoCS 13933 Messages postés lundi 11 juillet 2005Date d'inscription 4 juillet 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
devil2407 23 Messages postés mardi 18 septembre 2007Date d'inscription 12 janvier 2011 Dernière intervention - 14 août 2008 à 11:46
3
Merci
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

Merci devil2407 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de devil2407
BunoCS 13933 Messages postés lundi 11 juillet 2005Date d'inscription 4 juillet 2018 Dernière intervention - 12 août 2008 à 16:50
0
Merci
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...
Commenter la réponse de BunoCS
devil2407 23 Messages postés mardi 18 septembre 2007Date d'inscription 12 janvier 2011 Dernière intervention - 12 août 2008 à 17:53
0
Merci
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!!
:'(
Commenter la réponse de devil2407
BunoCS 13933 Messages postés lundi 11 juillet 2005Date d'inscription 4 juillet 2018 Dernière intervention - 12 août 2008 à 18:11
0
Merci
ç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...
Commenter la réponse de BunoCS
devil2407 23 Messages postés mardi 18 septembre 2007Date d'inscription 12 janvier 2011 Dernière intervention - 12 août 2008 à 18:19
0
Merci
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
Commenter la réponse de devil2407
devil2407 23 Messages postés mardi 18 septembre 2007Date d'inscription 12 janvier 2011 Dernière intervention - 12 août 2008 à 18:21
0
Merci
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 :'(
Commenter la réponse de devil2407
BunoCS 13933 Messages postés lundi 11 juillet 2005Date d'inscription 4 juillet 2018 Dernière intervention - 13 août 2008 à 09:31
0
Merci
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...
Commenter la réponse de BunoCS
devil2407 23 Messages postés mardi 18 septembre 2007Date d'inscription 12 janvier 2011 Dernière intervention - 14 août 2008 à 09:47
0
Merci
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()));
Commenter la réponse de devil2407
BunoCS 13933 Messages postés lundi 11 juillet 2005Date d'inscription 4 juillet 2018 Dernière intervention - 14 août 2008 à 10:08
0
Merci
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...
Commenter la réponse de BunoCS
BunoCS 13933 Messages postés lundi 11 juillet 2005Date d'inscription 4 juillet 2018 Dernière intervention - 14 août 2008 à 12:08
0
Merci
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...
Commenter la réponse de BunoCS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.