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 :

Fenêtre QDialog bloquée

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 147
    Par défaut Fenêtre QDialog bloquée
    Bonjour,

    J'ai créé une pop up pour mon programme sous la forme d'une fenêtre QDialog.

    Je rencontre un problème quand j'affiche la fenêtre (avec .show()), la fenêtre semble "bloquée"; impossible de déplacer la fenêtre ou de cliquer sur un bouton présent dans la fenêtre.
    J'ai vérifié que la QDialog est bien active au moyen de setEnabled() et isEnabled() mais il semble que la fenêtre ne reçoive aucun event de la souris ou du clavier.

    Une idée?

    Merci

  2. #2
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    En général une fenêtre/boîte de dialogue qui ne répond plus, c'est le code qui bloque, c'est à dire du code qui est long à s'exécuter et empêche la gestion des évènements graphiques d'être effectuée. Est-ce que c'est le cas ? (dans ce cas ton application entière ne devrait plus répondre)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 147
    Par défaut
    Oui effectivement, l'application totale est bloquée.
    J'ai une fonction qui est exécutée et qui visiblement bloque le tout. Cependant, quand celle-ci se termine, je devrais tout de meme récupérer mon application. Mais visiblement, la fenêtre qdialog est toujours bloquée.

    J'ai fait une boucle while d'attente d'où on ne sort que si un bouton de la fenêtre qdialog est pressé. La pop up est alors supprimée.
    Malheureusement, le bouton est dans mon cas inutilisable vu que la fenêtre est bloquée.

  4. #4
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Exact ! La boucle while n'est pas utilisable pour ce genre de cas, il faut fonctionner différemment avec les interfaces graphiques, mais Qt fournit tout ce qu'il faut pour ça.

    Il y a plusieurs manières de faire. Si tu veux simplement que ta pop up "bloque" la fenêtre principale, il faut alors l'ouvrir en modale plutôt qu'en modeless :
    http://qt.developpez.com/doc/4.6/qdialog/#details

    Si tu veux attendre un certain bouton avant d'effectuer quoi que ce soit, je pense que le plus logique serait de griser tous les autres widgets de ta boite de dialogue, et de les réactiver lorsqu'on clique sur le bouton.

    Dans tous les cas, il faut bannir l'utilisation de boucle d'attente, et penser "évènements"

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 147
    Par défaut
    Mais je ne vois pas trop comment faire pour attendre avec ma pop up ouverte sans boucle while.

    En fait, je crée ma pop up dans une fonction spécifique puis je la détruis juste avant de sortir de cette fonction quand on appuie sur le bouton en question.

    Il faudrait donc que je check en continu l'état du bouton avant d'effectuer le return de la fonction et de détruire la pop up?

    Jusqu'à présent, j'avais fait créé un flag que je vérifiais dans la boucle while et qui était assigné quand le bouton était pressé. Ce n'est donc pas la bonne manière de procéder...

  6. #6
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Il faut oublier cette manière de faire avec les interfaces graphiques, ou même dans tout programme qui doit gérer plusieurs choses en même temps. Dans ton cas précis tu peux "attendre" qu'une boite de dialogue soit fermée/validée dans le corps d'une fonction avec http://qt.developpez.com/doc/latest/qdialog/#exec

    Mais d'un point de vue plus général, il faudra parfois découper ton code dans plusieurs fonctions. Une fonction créant une fenêtre etc, et une fonction appelée avec un certain évènement (clic de bouton, un certain temps écoulé etc).

Discussions similaires

  1. [WD16] A l'exécution ma fenêtre est bloquée, figée
    Par luludev dans le forum WinDev
    Réponses: 6
    Dernier message: 28/09/2011, 14h09
  2. Fenêtre fille bloquée
    Par Floco dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 13/09/2011, 12h17
  3. [QtGui] Destruction apparement impropre d'une fenêtre Qdialog
    Par boula93 dans le forum PyQt
    Réponses: 3
    Dernier message: 30/08/2011, 00h06
  4. Fenêtre PHP bloquée
    Par david.thiltgen dans le forum Langage
    Réponses: 4
    Dernier message: 16/04/2007, 12h19
  5. [VB.NET] Jouer un son Wav sans que la fenêtre se bloque
    Par Winder dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/11/2006, 20h54

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