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 :

au sujet des menus


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut au sujet des menus
    Bonjour a tous:

    j'ai créé une barre de menus comme d'habitude avec 2 menus "file" et "about" sauf que cette fois le menu about n'a pas d'items de menu(donc pas de QAction associé), j'aimerais connecter au clic sur ce menu une boite de dialogue about.

    mais le signal triggered(QAction) sensé servir à cela reste sans effet.
    Comment puis-je procéder?
    De plus ,j'aimerais inserer au runtime un 3ème menu entre les 2 menus "file" et "about".

    Pour cela je pensais utiliser insertMenu de QMenuBar mais à nouveau la fonction réclame un QAction*
    dont ne dispose pas le menu "about".
    Comment procéder ?.

    Est-il possible de placer avec Qt un menu Help ou About tout à droite de la fenetre qui possede le menu?
    Sinon ,comment pourrait-on l'émuler?

    Peut-on utiliser Qt Designer pour gérer des ActionsGroup sans etre obliger de les coder à la main.
    Merci pour les réponses.

  2. #2
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    bon sa fait beaucoup de questions sa ...
    commencons par la fin :p
    je pence oui que sans probleme tu peux faire des ActionsGroup avec QtDisigner mais pour sa il faudra chercher un peux car je ne m'en sert pas donc ne poura pas t'aider ...



    pour faire un menu voila un bout de 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    class fenetre: public QMainWindow{
    public:
        fenetre();
       ~fenetre();
     
    private:
        QMenu   * menu;
        QAction * a_quitter;
    };
     
    fenetre::fenetre(){
        //menu
        this->menu      = this->menuBar()->addMenu("&Fichier");
        this->a_quitter = new QAction("Quitter", this);
        this->menu->addAction(this->a_quitter);
         //connectiion menu
        QObject::connect(this->a_quitter, SIGNAL(triggered()), qApp, SLOT(quit()));
     
     
     
        this->show();
    }
     
    fenetre::~fenetre(){
        if(this->menu!=NULL)
            delete this->menu;
        if(this->a_quitter!=NULL)
            delete this->a_quitter;
    }
    c'est un exemple pour u menu ensuite tu peux ajouter des options a ton menu et faire autand de menu que tu le souhaite...


    je pence que c'est ce que tu voulais faire non ?
    pensez au

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Merci à Duplo pour sa réponse pleine de this,mais ma question reformulée est la suivante:
    Comment associer un menu à une boite de dialogue alors que le menu n'a pas
    d'items de menu (seul son titre apparait dans la barre de menus).
    j'ai trouvé quelque chose qui s'en rapproche mais ça me semble pas très propre dans la mesure ou il faut 2 clicks consécutifs: 1 pour ouvrir le menu( comme il n'a pas d'items de menus il s'ouvre sur du vide) et un 2ème pour sélectionner le menu une fois le menu ouvert.
    L'déal serait une réponse immédiate à 1 click.
    J'ai souvenir que ça passait tout seul avec les MFC.

    Pour QT Designer ça fait plusieurs jours que j'essaie de lui faire enregistrer un ActionsGroup en vain.
    Tant pis pour moi.

    A duplo: c'est vraiment nécessaire tous ces this superfetatoires.

  4. #4
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par le petit dernier Voir le message
    A duplo: c'est vraiment nécessaire tous ces this superfetatoires.
    tu m'excusera pour ce code mais il date de l'epoque ou je debutais en objet et donc je mettais des this partout question de bien separer les choses mais je te rassure maintenant je n'en met plus

    sa y est j'ai compris ce que tu veux j'y regarde des que j'ai 5 min et je repost
    pensez au

  5. #5
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    bon je pence que cela repondra peut etre a peut pret a ta uestion enfin je l'espere ou alors je suis vraiment un incomprenant ^^

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    class fenetre : public QMainWindow{
    Q_OBJECT
    private:
        QMenu   * M_menu;
        QMenu   * M_sousMenu;
        QAction * MA_affiche;
        QAction * MA_quitter;
    public:
        fenetre();
        ~fenetre();
     
    public slots:
        void afficher();
    };
     
    fenetre::fenetre(){
        //menu
        M_menu         = menuBar()->addMenu("&Fichier");
        M_sousMenu     = M_menu->addMenu("&Options");
            MA_affiche = new QAction("Afficher", M_sousMenu);
        MA_quitter     = new QAction("Quitter", this);
        M_menu->addAction(MA_quitter);
        M_sousMenu->addAction(MA_affiche);
         //connectiion menu
        QObject::connect(MA_quitter, SIGNAL(triggered()), qApp, SLOT(quit()));
        QObject::connect(MA_affiche, SIGNAL(triggered()), this, SLOT(afficher()));
    }
     
    fenetre::~fenetre(){
        if(MA_quitter!=NULL)
            delete MA_quitter;
        if(MA_affiche!=NULL)
            delete MA_affiche;
        if(M_sousMenu!=NULL)
            delete M_sousMenu;
        if(M_menu!=NULL)
            delete M_menu;
     
    }
     
    void fenetre::afficher(){
        QMessageBox::information(0, QString("mon titre"), QString("affichage quelconque"));
    }
    pensez au

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Visiblement Duplo tu n'y es pas.

    Afin de simplifier le problème, voici la situation:
    j'ai une barre de menu qui ne dispose que d'1 menu par ex "About" mais ce menu ne se déroule pas car il n'a pas d'items de menu(ou actions associiées).

    Je veux pouvoir affichier une dialogue des que je clique sur ce menu.
    Or dans la pratique ,il me faut 2 clics:
    - 1 pour dérouler le menu qui ne se déroule pas mais consomme 1 clic.
    - et un 2ème pour trigger la connection.

    Ca me semble pas très propre.

    Ca ressemble à ca en code: (en reprenant ta syntaxe)
    dans le constructeur :
    M_menu = menuBar()->addMenu("&About");
    //le menu est vide
    //création de la connection sur le menu vide(qui a malgré tout 1 action)
    connect(M_menu->menuAction(), SIGNAL(triggered()), this
    , SLOT(dlgAbout()));

    A chaque fois que je veux faire apparaitre la DlgAbout, 2 clics sont nécessaires.

    Pour contourner le problème je code ce que tu as codé (je rajoute un item de menu(ou une action) associé au menu "About".

    PS: tous tes deletes m'inquiètent car dès que tu lies un enfant à un parent celui-ci prend en charge son effacement.
    Deux deletes sur le meme objet est une promesse d'apocalypse.

  7. #7
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    donc d'une part la prochaine foie pence dés le premier message a exprimer correctement ton besoin cela evitera que des gents comme moi qui souhaitent aider se casse le c... pour rien et perdent du temp inutillement.
    ensuite un bout de code est generallement le bien venu sa aide beaucoup pour se mettre en situation et eviter ce genre de debauches.

    d'autre part en ce qui concerne mes delete ne t'inquiete pas pour sa il n'y a rien d'anormal si tu les fait dans le bo ordre !!!

    donc pour le probeme que tu enonce cette foie si j'ai le temp ( et maintenant l'envie ) j'y jetterais un oeil.
    pensez au

  8. #8
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    de plus tu ne doit pas connaitre la doc
    http://qt.developpez.com/doc/

    car si non en un coup d'oeil tu te serais appersu que menuBar() d'une QMainWindow renvoi un un QMenuBar qui de possède un methode public :
    QAction addAction(QString)

    donc il te suffis de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MA_affiche = menuBar()->addAction(QString("blabla"));
    QObject::connect(MA_affiche , SIGNAL(triggered()), this, SLOT(afficher()));
    j'ai repris les même nom de propriétés qu'au desus question de ne pas remetre tout le code ...


    Cordialllement
    pensez au

Discussions similaires

  1. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25
  2. Menu dans la barre des menus OS X
    Par SHiSo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/06/2005, 20h16
  3. Wait cursor et accessibilité des menus
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 23/09/2004, 19h01
  4. Au sujet des mots de passe
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2002, 22h16
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03

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