Précédent   Forum du club des développeurs et IT Pro > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/04/2009, 22h01   #1
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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!
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2009, 23h01   #2
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 870
Détails du profil
Informations personnelles :
Nom : Homme yan verdavaine
Âge : 31
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 : 9 870
Points : 13 730
Points : 13 730
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
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2009, 22h04   #3
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2009, 09h04   #4
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 870
Détails du profil
Informations personnelles :
Nom : Homme yan verdavaine
Âge : 31
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 : 9 870
Points : 13 730
Points : 13 730
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é)
Citation:
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
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2009, 21h19   #5
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2009, 21h48   #6
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 267
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 267
Points : 1 436
Points : 1 436
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.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2009, 22h36   #7
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
1
2
3
4
5
6
7
{
    if ( ev->buttons() == Qt::CustomCursor){
        QPoint position ;
        position = ev->pos() ;
       ui->lineEdit->setText();
 
}
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2009, 22h37   #8
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 870
Détails du profil
Informations personnelles :
Nom : Homme yan verdavaine
Âge : 31
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 : 9 870
Points : 13 730
Points : 13 730
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
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2009, 10h00   #9
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
Si quelqu'un a la reponse j'en ai besoin ça fait 3 jours que suis dessus

Code :
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
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2009, 10h10   #10
cayou66
Membre confirmé
 
Avatar de cayou66
 
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 241
Points : 241
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 :
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 :
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.
}
cayou66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2009, 10h12   #11
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 870
Détails du profil
Informations personnelles :
Nom : Homme yan verdavaine
Âge : 31
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 : 9 870
Points : 13 730
Points : 13 730
Sinon, avec un filtre sur les event, cela t'évitera de redefinir mouseMoveEvent(QMouseEvent *event)
http://qt.developpez.com/doc/latest/...t/#eventfilter
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2009, 20h39   #12
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2009, 11h54   #13
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 267
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 267
Points : 1 436
Points : 1 436
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.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2009, 12h53   #14
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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) ;
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2009, 19h30   #15
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 267
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 267
Points : 1 436
Points : 1 436
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()...).
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2009, 11h50   #16
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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) ;
}
}
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2009, 14h44   #17
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 267
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 267
Points : 1 436
Points : 1 436
Avec lastPoint tu recuperes X et Y voir la doc ici.

Code :
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).
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2009, 15h43   #18
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2009, 17h07   #19
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 267
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 267
Points : 1 436
Points : 1 436
Normal pour que tu trouve null. Tu initialises pas lastPoint. Tu etais sur la bonne voie.
Utilises ce que tu avais fait:

Code :
QPoint lastPoint = event->pos();
Apes tu formates ta chaine.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2009, 18h37   #20
lisco
Membre régulier
 
Inscription : mars 2009
Messages : 237
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 237
Points : 93
Points : 93
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 :
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
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h22.


 
 
 
 
Partenaires

Hébergement Web