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 :

Menu et QVector


Sujet :

Qt

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    ok merci bien IrmatDen c'est sympa de prendre de ton temps !

    Bon je garantis pas la clarté je vais le commenter un peu, et te fait pas de soucis pour l'apparition du menu jme suis juste démerder pour qu'il apparaisse quand on entre dans la fenêtre avec la souris ...

    mainwindow.cpp

    mainwindow.h

    main.cpp

    text.xml

    N'hésite pas si tu as des trucs qui sont pas clairs ! Moi je vais fouiller du coté de google.

    Merci d'avance

  2. #22
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Héhé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     signals:
      void triggered(const QString &text);
    Voilà voilà... Alors que toi il faut que Launch soit un slot prenant ce type d'argument. Donc en effet, ça ne pouvait vraiment pas marcher.

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    Ah oui d'accord je comprend ....
    En mettant : void Launch(const QString &text);
    et connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(Launch(const QString &)));

    En effet sa marche enfin !!! Bizarre que sa me lance autant de fois l'appplication que j'ai d'éléments dans mon menu ... mais sa doit être une erreur toute bête !!

    En tout cas merci beaucoup IrmatDen d'avoir pris un peu de temps pour moi !!!

  4. #24
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Citation Envoyé par clem_69 Voir le message
    Bizarre que sa me lance autant de fois l'appplication que j'ai d'éléments dans mon menu ... mais sa doit être une erreur toute bête
    Etrange en effet; l'action doit être déclenchée, mais je ne vois nul part où avec le code que tu as fourni

    N'oublie pas le

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    Oui je ne vois pas non plus, c'est bizarre .....
    Sa me lance deux processus, sa veut donc dire que Launch est appelée deux fois quand je clic sur mon action .... Ce n'est pas le triggered qui pose soucis ?? Je ne devrais pas mettre plus un clicked ??

  6. #26
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Tu peux poster la fonction createActions stp? (Direct dans les balises [code ][ /code] (sans les espaces)

  7. #27
    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 : 44
    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.
    pourquoi cette ligne?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(list[i],SIGNAL(triggered()),signalMapper,SLOT(Launch()));
    Pour la fonction void MainWindow::Launch(QString prog), tu devrai regarder :
    http://qt.developpez.com/faq/?page=q...ir_application
    http://qt.developpez.com/faq/?page=q...ogramme_defaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    signalMapper->setMapping(act, path);
    connect(act,SIGNAL(triggered()),signalMapper,SLOT(map()));
    connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(triggered(const QString &)));
    tu créé autant de connect que d'action


    La tu as la possibilité de créé tes menu en cascade...
    Faudrait Que tu créé ton propre menu qui se ferme quand le souris quite sa zone
    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
    void MainWindow::enterEvent(QEvent *event)
     { 
     
       	  QMenu menu(this);
     
    	//i est le nombre d'éléments du menu,
       for(int j=0;j<i;j++)
    	{
    	 menu.addAction(list[j]);
    	}
        //le menu s'affiche à la position de la souris
    	menu.exec(QCursor::pos());
     
     
     }

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    Tu peux poster la fonction createActions stp? (Direct dans les balises [code ][ /code] (sans les espaces)
    Voila :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    void MainWindow::createActions()
     {
     
          QDomDocument doc;
    	  QFile f("text.xml");
    	  f.open(QIODevice::ReadOnly);
    	  doc.setContent(&f);
    	  f.close();
     
    	  QDomElement root=doc.documentElement();
    	  QDomElement child=root.firstChild().toElement();
    	  //compteur d'actions
    	  i=0;
    	  QSignalMapper *signalMapper = new QSignalMapper(this);
    	  //tant qu'il y a un élément dans le menu
    	  while(!child.isNull())
    	  {
    	    //
    	    if (child.tagName() == "element")
    	    {
    	      //on parcours l'élémént
    	      QDomElement grandChild=child.firstChild().toElement();
    	      while(!grandChild.isNull())
    	      {
     
    			//si c'est son nom, on crée une action dont le nom sera le nom du raccourci
    			if (grandChild.tagName() == "nom")
    			{
    				QString nom=grandChild.text();
    				//temp=grandChild.text();
    				list.append(new QAction((nom),this)); 
     
     
    			}
    			grandChild = grandChild.nextSibling().toElement();
    			//si c'est le path, on associe l'action définie avant avec l'action de lancement de programme
    			if (grandChild.tagName() == "path")
    			{
    				QString path=grandChild.text();
    				QAction *act = list[i];
     
    				//on utilise un mapper pour transmettre le path à Launch()
     
    				connect(act,SIGNAL(triggered()),signalMapper,SLOT(map()));
    				signalMapper->setMapping(act, path);
    				connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(Launch(const QString &)));
     
     
    			}
    	     	grandChild = grandChild.nextSibling().toElement();
     
    	    }
     
    	    child = child.nextSibling().toElement();
    		i++;
    		//ts<<i;
    	  }

    Salut.
    pourquoi cette ligne?
    Oui J'ai vu cette erreur elle n'y est plus, mais je ne voit pas comment je crée autant de connect de d'action ?

  9. #29
    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 : 44
    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
    A chaque noeud, tu créé un connect entre le signalmapper et le slot launch

    Ainsi avec trois noeuds, tu appellera trois fois launch car trois connections identique sont créé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(Launch(const QString &)));
    Met cette ligne juste aprés la création de signalMapper

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Par défaut
    ok merci beaucoup mon Gaulois c'est vrai que c'été logique !

    En tout cas merci a tous les deux vous m'avez été d'une grande aide !!

  11. #31
    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 : 44
    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 clem_69 Voir le message
    ok merci beaucoup mon Gaulois c'est vrai que c'été logique !
    ouai mais j'ai aussi mis du temps à le comprendre

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  3. Menu d'installation
    Par Le Yannos dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2002, 22h15
  4. Inserer Un Menu dans un autre en execution
    Par apt dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 11h22
  5. Menu en GL
    Par Kaïn dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/05/2002, 11h58

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