Partage
  • Partager sur Facebook
  • Partager sur Twitter

Task Menu sous Qt

Sujet résolu
    11 mai 2008 à 23:03:34

    Bonsoir les zéros ;)

    Je poste tout simplement car je suis entrain de réaliser un programme où je voudrais (suite à un clique droit) afficher un task menu (le petit menu avec des options qui apparaît en plein milieu de la fenêtre) et après de la recherche sur la doc je n'ai que trouvé un "QDesignerTaskMenuExtension" ce qui ne me convient pas du tout car je ne sais pas utiliser QDesigner, de plus c'est une extension et je ne saisi pas trop pourquoi. Je cherche donc une classe plus explicite et adapté à la prog "à la main" en quelques sortes, le problème c'est que je n'ai pas trouvé de classes comme QTaskMenu alors voila est-ce que quelqu'un aurait une idée ?

    Merci bien :)
    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2008 à 23:07:27

      à toi de le créer.
      Qt ne va pas créer se genre de chose car il y a tellement de possibilité de contenu que voilà.
      Donc il faut regarder du coter des évèement souris
      http://doc.trolltech.com/4.4/qmouseevent.html
      et QDialog ou QMessaheBox pour ouvrir la fenêtre.
      • Partager sur Facebook
      • Partager sur Twitter
      :)
        11 mai 2008 à 23:24:07

        EDIT : Il s'agit de mainWindow::contextMenuEvent(QContextMenuEvent *);

        Va voir ici
        • Partager sur Facebook
        • Partager sur Twitter
          11 mai 2008 à 23:32:11

          @moii Bah d'accord mais au moins dans ces cas-là il doit bien exister un équivalent de QMenu ? Car je n'arrive pas à l'afficher où je le souhaite dans mon QTreeWidget je n'arrive pas à l'afficher tout court dailleur :( . Et je pense qu'il serait inutile de recréer tout un menu avec les label en surbillance selon la position de la souris etc... ce serais vraiment la galère pour un truc de cette envergure.

          @Hauru je n'ai pas trouvé sa dans la doc :( tu n'aurais pas une idée du prog que ta regarder dans la doc ?

          Merci tout de même pour vos réponse ;)
          • Partager sur Facebook
          • Partager sur Twitter
            11 mai 2008 à 23:41:32

            J'ai edite. Par contre il n'existe que dans MainWindow je crois, pas dans QWidget.
            • Partager sur Facebook
            • Partager sur Twitter
              11 mai 2008 à 23:54:57

              je dirais plutot qu'il existe dans QWidget et non dans QMainWindow. (quoique, QMainWindow hérite de QWidget, donc il peux tout autant l'utiliser)

              http://doc.trolltech.com/4.4/qwidget.h [...] textMenuEvent
              • Partager sur Facebook
              • Partager sur Twitter
              Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
                11 mai 2008 à 23:58:48

                Bah au temps pour moi. C'est parce que dans l'exemple c'etait une QMainWindow :S. ha, sacré héritage. C'est encore mieux dans ce cas : c'est beaucoup plus general. Décidémement, Qt n'a pas fini de m'étonner. Bonne soirée à tous.
                @El Typhone : Si la reponse te convient, n'oublie pas de mettre le sujet en resolu s'il te plait.
                • Partager sur Facebook
                • Partager sur Twitter
                  12 mai 2008 à 9:39:45

                  Merci bien pour vos réponses ;) Je m'y mets dès ce matin :)

                  Edit :
                  Après de la recherche dans la doc etc... J'ai codé et j'arrive devant un sale problème :colere2: .

                  Voici un bout de code :
                  void Classe::contextMenuEvent(QContextMenuEvent * event)
                  
                  {
                  
                  	cout << "x : " << event->x() << " y : " << event->y() << endl;
                  
                  	contextMenu->popup(event->pos());
                  
                  }
                  
                  
                  
                  void Classe::creerContextMenu()
                  
                  {
                  
                  	contextMenu = new QMenu(this);
                  
                  	
                  
                  	nouveauDosAct = new QAction("Nouveau Dossier", contextMenu);
                  
                  	connect(nouveauDosAct, SIGNAL(triggered()), this, SLOT(creerDir()));
                  
                  	
                  
                  	nouveauFicAct = new QAction("Nouveau Fichier", contextMenu);
                  
                  	connect(nouveauFicAct, SIGNAL(triggered()), this, SLOT(creerFichier()));
                  
                  	
                  
                  	renommerAct = new QAction("Renommer", contextMenu);
                  
                  	connect(renommerAct, SIGNAL(triggered()), this, SLOT(renommer()));
                  
                  	
                  
                  	supprimerAct = new QAction("Supprimer", contextMenu);
                  
                  	connect(supprimerAct, SIGNAL(triggered()), this, SLOT(supprimer()));
                  
                  }
                  


                  (Ma classe hérite de QTreeWidget)

                  Le problème c'est que celui-ci ne m'affiche pas le menu ... Il reconnaît bien l'appel du menu car j'ai dans la console x et y (et ceux-ci sont bien valides et pas hors de la fenêtre) alors que dois-je faire pour l'afficher ? qu'est-ce qui cloche ?

                  Merci ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 mai 2008 à 14:10:15

                    Je ne sais pas trop comment tu as essayé de faire, mais dans l'exemple, il crée simplement un menu :
                    QMenu menu(this);
                    //ajoute les actions au menu, puis:
                    menu.exec(event->globalPos());
                    


                    Je pense que ca vient du fait que tu n'appelles pas creerContextMenu() dans l'evenement, et que tu ne fais pas d'appel a exec(). Je pense que c'est le exec() qui affiche le menu.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 mai 2008 à 14:18:09

                      J'ai essayé ton exemple et ajouter une action au menu en test et cela ne fonctionne toujours pas :(

                      void ExplorateurFtp::contextMenuEvent(QContextMenuEvent * event)
                      
                      {
                      
                      	cout << "x : " << event->x() << " y : " << event->y() << endl;
                      
                      	
                      
                      	QMenu menu(this);
                      
                      	QAction nouveauDosAct2("Nouveau Dossier", &menu);
                      
                      	connect(&nouveauDosAct2, SIGNAL(triggered()), this, SLOT(creerDir()));
                      
                              menu.exec(event->pos());
                      
                      }
                      


                      (J'ai essayé avec pos() et globalPos() mais le résultat est le même, rien ne s'affiche ...)

                      Edit :
                      Après vérification j'ai opéré quelques modifs et c'est juste la manière dont j'incluais les QAction* dans le menu qui ne convenait pas. Ta méthode de création et de redéfinition du menu à chaque appel n'est pas nécessaire et le popup() convient autant que le exec() ;) Mon menu était tout simplement vide :p

                      Le code fonctionnant est donc :
                      void Classe::contextMenuEvent(QContextMenuEvent * event)
                      
                      {
                      
                              contextMenu->popup(event->globalPos());
                      
                      }
                      
                      
                      
                      void Classe::creerContextMenu()
                      
                      {
                      
                      	contextMenu = new QMenu(this);
                      
                      	nouveauDosAct = new QAction("Nouveau Dossier", this);
                              contextMenu->addAction(nouveauDosAct);
                      	connect(nouveauDosAct, SIGNAL(triggered()), this, SLOT(creerDir()));
                      
                      }
                      



                      En tout cas merci pour votre aide :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 mai 2008 à 14:39:23

                        Oui je m'en suis rendu compte en lisant. Je n'avais pas vu qu'il manquait les addAction(). Bonne continuation.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Task Menu sous Qt

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown