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 :

Afficher une valeur à partir du curseur


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 Afficher une valeur à partir du curseur
    Bonjour, j'ai une image affichée dans un QLabel et j'aimerai afficher dans un QLineEdit à chaque position où pointe le curseur de la souris les coordonnées et la valeur du pixel,c'est à dire afficher les positions x, y de la souris et la valeur du pixel correspondant.J'ai essayé ceci mais ça m'affiche rien!!
    Si quelqu'un la déjà fait ou a une idée je suis preneur.
    Merci d'avance.


    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
    for (int y = 0; y < fxd.NbRows; y++)
                     for (int x = 0; x < fxd.NbColumns; x++)
                      {
     
                             //simple règle de trois
                             unsigned char  pixel = 255
                                     *
                                     (imageBuffer[y*fxd.NbColumns + x] - min)
                                     /
                                     (max - min);
                              pixel = abs(pixel - 255) ;
     
                             img.setPixel(x , y , qRgb( pixel , pixel, pixel ));
                       }
     
     
    Là je dois pouvoir les recuperer à chaque fois normalement.
     
                         cursor.setPos(x,y) ;
     
                          QLabel label ;            
                           ui->QLabel->cursor(x,y,pixel) ;
    Help please!

  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
    tu relie à chaque fois ton image
    Sérieux, commence par regarder les tuto. Tu y apprendra beaucoup de base.

    Sinon, regarde du côté des event d'un QWidget
    http://qt.developpez.com/doc/4.4/qwi...cted-functions

  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
    Bonjour, j'ai cherché et lu les tuto mais j'ai vraiment besoin de votre aide, car je vois plein de classe mais je sais pas laquelle utiliser entre QMouseEvent, QPoint, int x()const et int y()const pour pouvoir afficher les positions et la valeur du pixel pointée par le curseur!!! Si quelqu'un la deja fait j'ai besoin d'aide svp.
    Merci d'avance

  4. #4
    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 cherché et lu les tuto mais j'ai vraiment besoin de votre aide, car je vois plein de classe mais je sais pas laquelle utiliser entre QMouseEvent, QPoint, int x()const et int y()const pour pouvoir afficher les positions et la valeur du pixel pointée par le curseur!!! Si quelqu'un la deja fait j'ai besoin d'aide svp.
    Merci d'avance
    Il te faut réimplémenter les événement lié à la souris qui t'intéresse (cf lien qu je t'ai donné)
    void mouseDoubleClickEvent ( QMouseEvent * event )
    void mouseMoveEvent ( QMouseEvent * event )
    void mousePressEvent ( QMouseEvent * event )
    void mouseReleaseEvent ( QMouseEvent * event )
    void moveEvent ( QMoveEvent * event )
    Ces évènements te donneront la position x,y de ton curseur dans le repère widget. Tu n'as plus cas rechercher la valeur correspondante.

    Une autre façon de faire et d'installer un filtre d'évènement :
    http://qt.developpez.com/doc/latest/...alleventfilter

  5. #5
    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
    Bonjour, j'ai implementé ça, mais j'ai un soucis que je vois pas trop car j'ai je positionne mon curseur sur mon image je vois rien s'afficher dans le QLineEdit meme pas les pos en x et y du curseur dans le repere de l'image.
    Est ce ya un SLOT a integrer dans les mouvements du souris??ou un autre bogue??help please

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void Maclass::mouseMoveEvent( QMouseEvent *ev )
    {
        if ( ev->buttons() == Qt::CustomCursor){
            QPoint position ;
            position = ev->pos() ;
           ui->lineEdit->pos() ;
     
    }
    Merci

  6. #6
    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
    Je vois deja 2 problème dans ton code deja il manque une parenthese mais c'est peut etre un copier collé malheureux... De meme la fonction QLineEdit->Pos() retourne la position du widget QLineEdit et n'affiche en aucun cas le contenu des position X et Y. Utilise setText() pour afficher du texte.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #7
    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
    setText je pense que c'est pour afficher du text?mais moi je veux afficher la position du curseur.Donner moi un coup de pousse pour que je vois plus clair svp.j'en ai besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {
        if ( ev->buttons() == Qt::CustomCursor){
            QPoint position ;
            position = ev->pos() ;
           ui->lineEdit->setText();
     
    }

  8. #8
    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
    sans compter que ev->buttons() retourn une composition des flags buttons
    http://qt.developpez.com/doc/latest/...usebutton-enum
    et que Qt::CustomCursor ne figure pas

  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
    Si quelqu'un a la reponse j'en ai besoin ça fait 3 jours que suis dessus

    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 maclass::mouseMoveEvent(QMouseEvent *event)
    {
        QPoint MousePosition ;
     
        int dx = event->x() ; //Cordonnée en x
        int dy = event->y() ; //Cordonnée en y
        if(event->MouseMove & Qt::MoveAction) //On relie event aux deplacements du curseur de la souris
        {
            MousePosition = event->pos() ;//On stocke la position à chaque deplacement dans une variable.
            QToolTip::showText(MousePosition,"Mouse Position", this) ;
     
     
        }
     
    }
    Je recupere les coordonnées du curseur en x et en y et ensuite la valeur correspondante en pos, j'utilise QToolTip pour affficher
    les valeurs trouvées.Mais mon souhait est de les affficher dans une zone dans mon ihm comme dans un QLabel ou un QLineEdit
    Si pouvez m'aider à resoudre mon probleme svp. Merci

  10. #10
    Membre actif Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Points : 273
    Points
    273
    Par défaut
    Et bien, si tu es sûr de récupérer la position, tu n'a qu'à envoyer un signal à ce moment là, avec un QPoint en paramètre.

    Une autre classe, celle qui s'occupe de faire des QTextEdit, ou des QLCDNumber par exemple, récupère le signal, et lance son slot pour afficher les valeurs.

    Dans maclass:
    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
     
    //Header:
     
    signals:
        void moveEventOnMaClasse(QPoint p);
     
    //Source:
    void maclass::mouseMoveEvent(QMouseEvent *event)
    {
    ...
    ...
    emit moveEventOnMaClasse(event->pos());
    ...
    ...
    }
    Et dans ta classe qui affiche les QTextEdit:
    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
     
    // Header:
     
    public slots:
        void displayPos(QPoint p);
     
    // Source:
     
    maMainWindow::maMainWindow()
    {
    ...
    maclass*m = new maclass;
    connect(m, SIGNAL(moveEventOnMaClasse(QPoint)), this, SLOT(displayPos(QPoint)));
    ...
    }
     
    maMainWindow::displayPos(QPoint p)
    {
        // Et là tu fais ce que tu veux avec ta position.
    }

  11. #11
    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
    Sinon, avec un filtre sur les event, cela t'évitera de redefinir mouseMoveEvent(QMouseEvent *event)
    http://qt.developpez.com/doc/latest/...t/#eventfilter

  12. #12
    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
    Bonjour, voici où j'en suis , finalement je pense que c'est lui interessant de pouvoir afficher la valeur du pixel pointé en cliquant sur un point et de faire apparaitre la valeur dans un rectangle sur le bout du curseur.
    Mon probleme est que X ,Y et Pixel sont dans un QString donc je sais pas comment recuperer les valeurs???

    Aider moi svp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void maClass::mousePressEvent(QMouseEvent *event) //Quand on click sur le bouton droit du curseur.
     {
        QPoint lastPoint ;
     
        int x, y ;
         if (event->button() == Qt::LeftButton) {
             lastPoint = event->pos() ;
     
     
             QToolTip::showText(lastPoint, "X = , Y =, Pixel=  ", this) ;
    Yan pour la methode Event Filter j'ai lu la doc mais j'ai du mal a la comprendre.
    Si ya d'autres methodes aussi je suis preneur.
    Merci d'avance

  13. #13
    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
    J'ai pas bien compris ton problème de QString ? puex tu mieux expliquer ?

    Sinon dans la FAQ tu devrais trouvez tout ce que tu a besoins pour soit convertir une QString en type numerique et vise versa.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  14. #14
    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
    J'ai pas bien compris ton problème de QString ? puex tu mieux expliquer ?
    .
    En fait ce que je veux dire c'est quand je clique sur le bouton droit de la souris il m'affiche ça: "X = , Y =, Pixel= " alors que c'est un QString, et je sais pas comment recuperer les positions de ma souris dans un QString.
    J'ai besoin d'explication comment recuperer les positions de ma souris uniquement dans le repere de mon image.
    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void maClass::mousePressEvent(QMouseEvent *event) //Quand on click sur le bouton droit du curseur.
     {
        QPoint lastPoint ;
     
        int x, y ;
         if (event->button() == Qt::LeftButton) {
             lastPoint = event->pos() ;
     
     
             QToolTip::showText(lastPoint, "X = , Y =, Pixel=  ", this) ;

  15. #15
    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
    Ta structure lastPoint te permet de recuperer le point pointer par le curseur de ta souris. Apres je sais pas dans qu'elle repere sont ces point mais si c'est dans celui de ton image c'est facile et si c'est dans celui du widget parent c'est pas super compliqué il y a juste d'une translation a faire pour changer de repere.

    Pour ce qui est du formatage de ta QString tu as tout dans la faq avec meme plusieur methode pour le faire (arg(), sprintf()...).
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  16. #16
    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
    Ta structure lastPoint te permet de recuperer le point pointer par le curseur de ta souris. Apres je sais pas dans qu'elle repere sont ces point mais si c'est dans celui de ton image c'est facile et si c'est dans celui du widget parent c'est pas super compliqué il y a juste d'une translation a faire pour changer de repere.

    Pour ce qui est du formatage de ta QString tu as tout dans la faq avec meme plusieur methode pour le faire (arg(), sprintf()...).
    ça parait facile mais je vois pas trop comment faire.Effectivement mon repere est celui de l'image.Et tu m'as parlé de structure , je vois pas trop. Si vous pouvez me debloquer à partir de ce bout de code à recuperer les coord x et y de la souris et la valeur pointer par la souris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void maClass::mousePressEvent(QMouseEvent *event) //Quand on click sur le bouton droit du curseur.
     {
        QPoint lastPoint ;
     
        int x, y ;
         if (event->button() == Qt::LeftButton) {
             lastPoint = event->pos();
     
             QToolTip::showText(lastPoint, "X = , Y = , Value = ", this) ;
    }
    }

  17. #17
    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
    Avec lastPoint tu recuperes X et Y voir la doc ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QString str = "X=%1 Y=%2";
    str.arg(lastPoint.x).arg(lastPoint.y);
    Suivant dans quel repere sont donné X et Y un a un changement de repere peut etre necessaire.

    Pour l'affichagfe X et Y sont des int donc il faudra que tu formates ta chaine pour convertir les int en QString (cf FAQ et plus haut).
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  18. #18
    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
    J'ai mis un MessagaBox pour pouvoir afficher ce que je retourne comme valeur mais apparemnt c'est nul partout.Et je sais pas coment introduire le repere de mon image .Je croyais que l'evenement le gerer tout seul?Si vous pouvez m'expliquer c'est urgent pour moi je dois trouver la solution;
    Je pensais à definir le repere de mon image en faisant:
    while(x < Nblignes && y < Nbcolonnes) ??? mais je pense pas que ca soit une bonne idee.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QPoint lastPoint ;
     
         if (event->button() == Qt::LeftButton)
        {
             lastPoint.setX(lastPoint.x()) ;
             lastPoint.setY(lastPoint.y()) ;
             QString str = "X=%1 Y=%2";
             //str = str.sprintf("X%d" , lastPoint.x() ).sprintf("Y%d", lastPoint.y());
             QMessageBox::information(this, tr("Image Viewer"), tr("the position x of the pixelis%1.").arg(lastPoint.x()) ) ;
         }
    Merci d'avance

  19. #19
    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
    Normal pour que tu trouve null. Tu initialises pas lastPoint. Tu etais sur la bonne voie.
    Utilises ce que tu avais fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPoint lastPoint = event->pos();
    Apes tu formates ta chaine.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  20. #20
    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
    Finalement j'ai trouvé plus facile, mais mon probleme est que je sais pas comment definir le repere de l'image affichée???Car là je pense qu''il me donne les coordonnées dans le repere de l'ihm!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void maClass::mousePressEvent(QMouseEvent *event) //Quand on click sur le bouton droit du curseur.
     {
     
     
         if (event->button() == Qt::LeftButton)
        {
             QMessageBox::information(this, tr("Image Viewer"), tr("the position x of the pixelis%1.").arg(event->x()), tr("the position y of the pixelis%1.").arg(event->y()) ) ;
         }
    Je voudrais les coord dans le repere de l'image!!Expliquer moi please, coment definir les limites de ce repere

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/01/2010, 18h08
  2. Réponses: 4
    Dernier message: 15/09/2006, 18h28
  3. [TP] Afficher une valeur avec outtext
    Par Bouilla dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/03/2005, 10h57
  4. Réponses: 3
    Dernier message: 28/01/2004, 15h55
  5. Afficher une valeur du context
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 13
    Dernier message: 28/04/2003, 14h49

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