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

Discussion :

Signal de fermeture d'une boite de dialogue

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut Signal de fermeture d'une boite de dialogue
    Bonjour à tous,

    J'ai une boîte de dialogue avec une ComboBox et un bouton Valider. J'aimerai que quand je clique sur Valider je puisse récupérer la chaine de ComboBox sélectionné. Pour cela j'ai donc connecté le signal du bouton en envoyant la chaine à une méthode d'une autre classe qui gère la chaine.

    Voici le code :
    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
     
    NameDialog::NameDialog(Map *map, QWidget *parent) : QDialog(parent)
    {
        name_box = new QComboBox(this);
        ...
     
        close_button = new QPushButton(tr("Valider"),this);
     
        // Connection du signal
        QObject::connect(close_button, SIGNAL(clicked()), this, SLOT(WidgetMap::check_station()));
        // WidgetMap étant la classe qui possède le slot check_station
        // Comment faire pour que cette méthode puisse recevoir name_box->currentText ?
     
        vbox = new QVBoxLayout(this);
        vbox->addWidget(name_box);
        vbox->addWidget(close_button);
        setLayout(vbox);
    }
    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour

    Il me semble qu'il existe un SLOT qui permet d'indiquer que la fenêtre est en cours de fermeture.

    - Connecte le clique de ton bouton vers la fermeture de la fenetre.
    - Connecte la fermeture de la fenêtre vers la lecture de ta combo box.

    Si j'ai bien compris ton problème, je pense que ca devrait fonctionner.

    Cordialement,
    PKO

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut
    En fait j'ai finalement trouvé une autre technique, elle marche mais est-elle valable ?
    En gros je veux passer des paramètres entre widget, dans ce cas là c'est un QString correspondant à l'item sélectionné de la combobox, comme le widget à qui je veux donner cet argument est le widget parent je fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void NameDialog::button() // C'est la méthode appelé par le signal clicked du bouton de la boite de dialogue
    {
        WidgetMap *temp;
        temp = (WidgetMap*)(this->parentWidget());
        // Je cast avec ma classe que j'ai dérivée de QWidget
     
        temp->check_station(name_box->currentText());
        // Check_station est la méthode du widget parent WidgetMap
     
        // Fermeture de la boite de dialogue
        close();
    }
    Le problème est que ça marche si le widget parent est bien de type WidgetMap, si il ne l'est pas, que se passe t-il ? Plantage ?

    De toute façon ma boite de dialogue est toujours appelé par WidgetMap mais bon, n'y a t-il pas une autre solution plus valable ?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par black is beautiful Voir le message
    Le problème est que ça marche si le widget parent est bien de type WidgetMap, si il ne l'est pas, que se passe t-il ? Plantage ?
    yep plantage ou pas mais ton programme se retrouve en éxécution indéfinie et s'il n'as pas planté il plantera un peu plus tard. C'est la magie des erreur mémoire

    Sinon pour faire un cast propre en Qt utilise qobject_cast (tes class doive avoir la macro Q_OBJECT)
    http://qt.developpez.com/doc/4.4/qobject/#qobject_cast

    Un dynamic_cast devrais aussi être possible

    Par contre je te déconseille la méthode que tu utilise.
    Par exemple, si tu modifie WidgetMap il faudra surement modifier ta dialog

    A toi de voir ce qui te conviens le plus

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut
    Ok, premièrement je vais utiliser diag.exec() parce-que ce n'est pas ce que j'avais fait jusque là.

    Par contre j'aimerai que quand WidgetMap récupère la valeur de la comboBox, elle s'affiche dans un label de MainWidget qui est le widget parent de WidgetMap. Alors quelle est la méthode la plus simple pour accéder à des méthodes d'un widget parent dérivé?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par black is beautiful Voir le message
    Par contre j'aimerai que quand WidgetMap récupère la valeur de la comboBox, elle s'affiche dans un label de MainWidget qui est le widget parent de WidgetMap. Alors quelle est la méthode la plus simple pour accéder à des méthodes d'un widget parent dérivé?
    Utilise plutôt les signals/slots

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    1- Qt fournie un méthode pour cela
    http://qt.developpez.com/doc/4.4/qinputdialog/#getitem

    2- Si tu utilise une QDialog, en principe tu utilise la fonction exec() pour l'afficher et un fois fermé tu peut récupérer ce que tu veut
    http://qt.developpez.com/doc/4.4/qdialog/#exec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {
    maDialig diag;
    diag.exec();
     
    /*traitement de la réponse*/
    }
    3-Si tu n'utilise pas exec(), tu le considère comme une widget top level.

    Si je comprend bien ce que tu veut faire, tu doit créer un signal qui va envoyer la valeur de ta combox. Et tu fait connect avec ce signal.
    Mais je te conseil la solution 1 ou 2

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

Discussions similaires

  1. [XL-2010] Erreur automation suite à la fermeture d'une boite de dialogue
    Par badege3378 dans le forum Excel
    Réponses: 0
    Dernier message: 10/02/2015, 14h26
  2. [PPT-2003] Interrompre une macro jusqu'à la fermeture d'une boite de dialogue
    Par thilamb dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 29/11/2011, 08h47
  3. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 08h57
  4. Réponses: 5
    Dernier message: 04/04/2003, 15h02
  5. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30

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