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 :

mousePressEvent et qt Designer


Sujet :

Qt

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut mousePressEvent et qt Designer
    Bonjour, j'ai un menu bar composé de quatre boutons dans mon ihm fait avec qt Designer et je voudrais faire un Switch entre les 4 boutons: c'est a dire à chaque fois qu'un bouton est cliqué j'active la fonction mousePressEvent qui fait des choses differentes suivants le bouton activé:
    La grande question c'est comment je peux selection ce que je veux faire suivant que tel ou tel bouton soit cliqué!

    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
     
    void maClass::mousePressEvent( QMouseEvent *event)
     {
     
       Switch(ui->MenuBouton) //ça marche mais c'est pour montrer une idée de ce que je veux faire
       {
     
        case BoutonVerticale: //Si c'est ce bouton qui est cliqué voila ce que doit faire un clique sur la souris
        {
         if ( event->button() == Qt::LeftButton)
         {
            for(i = 0; i < 1500; i++)  //Pour rendre une ligne verticale défectueuse!
             {
                img.setPixel(PositionX , (PositionY +i), qRgb(255, 0, 0)) ;
     
             }
     
            for(int j = 0; j < PositionY; j++)
            {
              img.setPixel(PositionX , (PositionY - j), qRgb(255, 0, 0)) ;
            }
        }
         break ;
    }
         case BoutonHorizontal:
         {
          if ( event->button() == Qt::LeftButton)
           {
            for(i = 1; i < 1800; i++) 
             {
                   img.setPixel((PositionX + i), PositionY, qRgb(255, 0, 0)) ;
                      for(int j = 0; j < PositionX; j++)
                   {
                   img.setPixel((PositionX - j), PositionY, qRgb(255, 0, 0)) ;
                   }
              } 
          }
     break ;
    }
        case BoutonSeul:
       {
        if ( event->button() == Qt::LeftButton)
        {
     
            img.setPixel(PositionX, PositionY, qRgb(255, 0, 0)) ; 
        }
    break ;
    }
            m_label->setPixmap(QPixmap::fromImage(img)) ;
            ui->ZoneImage->setWidget(m_label) ;
     
     
         }
    merci d'avance!

    Sinon est -il possible d'appeler la fonction QMousePressEvent dans une autre methode?J'ai essayé et je pense que non?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par lisco Voir le message
    Bonjour, j'ai un menu bar composé de quatre boutons dans mon ihm fait avec qt Designer et je voudrais faire un Switch entre les 4 boutons: c'est a dire à chaque fois qu'un bouton est cliqué j'active la fonction mousePressEvent qui fait des choses differentes suivants le bouton activé
    Pourquoi tu n'utilise pas le signal de tes boutons?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par yan Voir le message
    Pourquoi tu n'utilise pas le signal de tes boutons?
    J'ai essayé mais je capte pas trop car ces 4 quatres boutons ont le meme SLOT qui est mousePressEvent mais juste que ça fait des choses différentes suivants le bouton cliqué au paravant!!

    j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(ui->BoutonVerticale, SIGNAL(triggered()), this, SLOT(mousePressEvent(QMouseEvent*)))) ;
    mais ça me fait dans ce cas les 4 boutons d'un seul cout

    j'ai essayé aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(ui->BoutonVerticale->triggered(true))
    mais c'est inactif

  4. #4
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Deux solutions :

    - Un slot par bouton qui décrit le comportement au clic de ce bouton. Connectes ensuite le signal clicked() de chaque bouton à son slot particulier.

    - Un slot pour tous les boutons. Les boutons possèdent un identifiant unique (par le objectName par exemple). Ce slot récupère le bouton qui émet le signal via la méthode sender(), puis son identifiant. En fonction de cet identifiant, tu es capable de déterminer l'action à effectuer. N'oublie pas pour finir de relier chaque signal clicked() de tes boutons à ce slot.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(ui->BoutonVerticale, SIGNAL(triggered()), this, SLOT(mousePressEvent(QMouseEvent*)))) ;

    quand on te donne des liens pour apprendre la base de Qt, se serait bien que tu les regardes, ne serai ce qu'un peu...

    Et si tu ne comprend pas quelque chose, demande.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Ryo2468 Voir le message
    - Un slot pour tous les boutons. Les boutons possèdent un identifiant unique (par le objectName par exemple). Ce slot récupère le bouton qui émet le signal via la méthode sender(), puis son identifiant. En fonction de cet identifiant, tu es capable de déterminer l'action à effectuer. N'oublie pas pour finir de relier chaque signal clicked() de tes boutons à ce slot.
    QSignalMapper peut être plus interessant pour cette solution

  7. #7
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Comment crées tu ta menu Bar avec tes boutons ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par yan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(ui->BoutonVerticale, SIGNAL(triggered()), this, SLOT(mousePressEvent(QMouseEvent*)))) ;

    quand on te donne des liens pour apprendre la base de Qt, se serait bien que tu les regardes, ne serai ce qu'un peu...

    Et si tu ne comprend pas quelque chose, demande.
    ça marche bien ce que j'ai mis mais ça depend juste de là où on l'utilise, car je l'ai toujours utilisé! dit qu'est ce qui te géne dans ça?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Comment crées tu ta menu Bar avec tes boutons ?
    avec Qt Designer!
    au passage , c'est assez bizarre car j'arrive plus a ajouter des widget , enfin dans le .ui j'ajoute des widgets mais quand je compile ils n'apparaissent pas

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par lisco Voir le message
    ça marche bien ce que j'ai mis mais ça depend juste de là où on l'utilise, car je l'ai toujours utilisé! dit qu'est ce qui te géne dans ça?
    Ce connect est faux.
    triggered() et mousePressEvent(QMouseEvent*) n'ont pas du tout la même signature et sont incompatible. De plus mousePressEvent n'est pas un slot.

    Si un objet envoi un signal clicked (ou triggered suivant ce que tu utilise), ce n'est pas pour rien.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    I need help; ya personne pour me dire comment apeler mousePressEvent dans une methode slot, je veux kan je clique sur un bouton mousePressEvent soit actif, j'ai reimplementé mousePressEvent de sorte qu'elle ecris sur une image kan on clique sur le bouton droit de la souris mais je voudrais que ca soit actif uniquement kan je clique sur un bouton :du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void EcriresurImage()
    {
       mousePressEvent(QMouseEvent* event) ;
    }

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Tu ne devrais pas te focaliser sur moussPressEvent. Oublie ça, c'est une méthode protégée. Le principe est de la réimplémenter quand tu fais ta propre classe de bouton. Ce n'est pas du tout ton cas, tu utilises des QPushButton standards, je suppose.

    Pour faire ce que tu veux faire, le plus simple, c'est un QSignalMapper comme yan te l'a dit. Le principe est le suivant: à chaque bouton, tu associes un nom ou un numéro. Une fois configuré (la doc du QSignalMapper est très bien faite, tu verras), lorsque tu cliques sur un bouton, tu arrives dans une fonction particulière (un slot), avec un entier ou une chaine de caractère en paramètre, qui te permet de savoir quel bouton a été cliqué.

    Tu n'as plus qu'à faire le switch dont tu rêves depuis le début.

    C'est fait pour faire ce que tu veux faire.

    (mais oublies moussPressEvent!)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  3. [OpenTools, designer] CmtSubComponent et superClasse
    Par kainor dans le forum JBuilder
    Réponses: 4
    Dernier message: 04/03/2003, 11h32
  4. Réponses: 3
    Dernier message: 09/02/2003, 01h09
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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