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 :

Gestion fenêtre auxiliaire


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Par défaut Gestion fenêtre auxiliaire
    Bonjour,

    J'ai développé une application qui permet d'ouvrir une fenêtre auxiliaire. Pour l'instant, cette fenêtre auxiliaire est modale. J'aimerais qu'elle soit amodale, mais que :
    - il ne soit pas possible d'en ouvrir deux (et que l'essai de nouvelle ouverture fasse revenir la fenêtre existante au premier plan),
    - la fermeture de la fenêtre principale entraîne celle de la fenêtre auxiliaire.

    Comment vérifier que la fenêtre auxiliaire existe déjà ?
    Comment la faire passer au premier plan ?
    Comment la fermer quand on ferme la fenêtre principale ?

    Cordialement.

  2. #2
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 477
    Par défaut
    Salut,

    Il faudrait que tu nous dévoile un peu de ton code qu'on puisse répondre précisément. Je vais essayer malgré tout de te donner quelques infos.

    Pour la question 3, il faut que ta fenêtre secondaire soit enfant de la fenêtre principale. Il suffit pour cela de donner comme argument le pointeur de la fenêtre principale au constructeur de la fenêtre fille. Par exemple, si tes deux fenêtres sont des QDialog (mais c'est valable aussi avec QMainWindow, QFrame, QWidget...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QDialog* fenetrePrincipale = new QDialog();
    QDialog* fenetreSecondaire = new QDialog(fenetrePrincipale);
    Il faut aussi que ta QApplication ait sa propriété setQuitOnLastWindowClosed() à true mais c'est le comportement par défaut, donc tu n'as normalement pas a t'en soucier.

    Pour les question 1 et 2, c'est pas vraiment propre à Qt, c'est plutôt à toi de coder le comportement voulu. Un simple booléen peut par exemple stocker l'état de la fenêtre secondaire. Tu passes le booléen à true une fois la fenêtre ouverte, et tu le remet à false quand tu la ferme . Ensuite tu empêches l'ouverture d'une autre fenêtre tant qu'il n'est pas à false. En fouillant un peu, il semblerait qu'appeler successivement hide() puis show() sur une fenêtre la replace au premier plan. Sinon regarde peut-être du côté de setFocus().

    Bon courage.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Par défaut
    Merci pour ces indications !

    Voici des morceaux de mon code :

    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main(int argc, char *argv[])
    {
        ...
        FenetrePrincipale FP;
        ...
    }
    FenetrePrincipale.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class FenetrePrincipale : public QMainWindow
    {
        Q_OBJECT
     
    	public:
                FenetrePrincipale();
                ~FenetrePrincipale();
        ...
    }
    FenetrePrincipale.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FenetrePrincipale::FenetrePrincipale()
    {
        ...
        creerActions();
        ...
    }
     
    void FenetrePrincipale::creerActions()
    {
        ...
        actVerifMot = new QAction("Vérifier mot", this);
        connect(actVerifMot, SIGNAL(triggered()), this, SLOT(verifierMot()));
        ...
    }
    verifierMot.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void FenetrePrincipale::verifierMot( )
    {
        ...
        verifier = new QWidget( );
        verifier->show( );
        ...
    }
    Comment faire dans mon cas pour que la fenêtre "verifier" soit une fenêtre fille de la fenêtre principale "FP" ?

  4. #4
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 477
    Par défaut
    Tu lui transmet le pointeur de la fenêtre mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void FenetrePrincipale::verifierMot( )
    {
        ...
        verifier = new QWidget(this);
        verifier->show( );
        ...
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Par défaut
    J'avais essayé ça, mais il ne crée pas de deuxième fenêtre (il crée le contenu de ma fenêtre secondaire dans la fenêtre principale).

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Normal. Regarde la documentation du constructeur de QWidget, et à quoi sert le deuxième paramètre que tu n'utilises pas.

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

Discussions similaires

  1. [WD17] Gestion compte auxiliaire
    Par MISS ELIOTE dans le forum WinDev
    Réponses: 4
    Dernier message: 25/02/2014, 11h48
  2. Réponses: 2
    Dernier message: 08/02/2010, 12h12
  3. Gestion fenêtres Modales
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2006, 13h18
  4. [Tcl/Tk] Gestion de fenêtre
    Par HRS dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 28/08/2004, 21h27
  5. [DirectInput] Gestion des touches en mode fenêtré
    Par Harry_polin dans le forum DirectX
    Réponses: 8
    Dernier message: 19/03/2003, 17h50

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