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 20/04/2009, 09h24   #21
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
Je pensais que mon message en page 1 était clair, j'ai dû me tromper alors...
En ce qui concerne quel ou quel autre repère est utilisé, ce sera celui dans le lequel tu redéfini ta/tes méthode(s) de mouseEvent, tout simplement.
Si vraiment tu voulais récupérer les valeurs x,y, et les afficher dans un widget quelconque, ma solution fonctionnait.

Edit: tu veux vraiment garder une QMessageBox à la fin???
cayou66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2009, 18h54   #22
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 cayou66 Voir le message
Je pensais que mon message en page 1 était clair, j'ai dû me tromper alors...
En ce qui concerne quel ou quel autre repère est utilisé, ce sera celui dans le lequel tu redéfini ta/tes méthode(s) de mouseEvent, tout simplement.
Si vraiment tu voulais récupérer les valeurs x,y, et les afficher dans un widget quelconque, ma solution fonctionnait.

Edit: tu veux vraiment garder une QMessageBox à la fin???
Si tu veux j'ai essayé cette methode mais ça marche pas chez moi.J'ai deja une classe principale dans mon projet donc je veux juste une methode pour l'implementer dans mon projet.
Mon but c'est pas de garder le QMessageBox mais de l'affiche dans un QListEdit ou au mieux de l'afficher au curseur quand je clique avec la souris.Pour le moment le QMessageBox est le plus facile que j'ai compris pour l'instant.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void maclass::mousePressEvent(QMouseEvent *event) //Quand on click sur le bouton droit du curseur.
 {
        QPoint lastPoint ;
      //   std::cout << "Un clic a été fait à la position (" << event->x() << " , " << event->y() << " ) " << std::endl;
 
 
 
     if (event->button() == Qt::LeftButton)
    {
       //  QPoint lastPoint = event->pos();
        /* 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(event->x()), tr("the position y of the pixelis%1.").arg(event->y()) ) ;
     }
Voici tout ce que j'ai essayé sans trop comprendre où je vais !!!Les guars j'ai besoin une explication :
> comment definir le repere de mon image
>comment faire apparaitre les coordonnées et les valeurs de mes pixels
J'ai lu la FAQ et les tutoriels et j'ai besoin de votre aide.Je dois cloturer ce chapitre avant de me coucher svp help
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2009, 20h49   #23
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 268
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 268
Points : 1 439
Points : 1 439
Je sais pas si c'est la meilleur solution mais tu peux recuperer des coordonnée dans different repere avec ces methode ici. Apres tu peut aussi le faire toi meme en recuperant la position de ton label qui de sert de display dans ta dialogue et apres a partir de la tu sais si ta souris est sur ton widget et a quel endroit elle se trouve.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2009, 23h44   #24
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 885
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 885
Points : 13 811
Points : 13 811
maClass est quel partie de ton ihm?
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 00h39   #25
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 yan Voir le message
maClass est quel partie de ton ihm?
Ben c'est le seul QWidget de mon ihm donc je pense qu'elle represente toute l'ihm.
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 00h55   #26
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 885
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 885
Points : 13 811
Points : 13 811
Citation:
Envoyé par lisco Voir le message
Ben c'est le seul QWidget de mon ihm donc je pense qu'elle represente toute l'ihm.
Elle dérive de QLabel?
ou le QLabel est dedans?
tu pourrais montrer ton code?
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 19h07   #27
Shugo78
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 895
Points : 895
Envoyer un message via MSN à Shugo78
Citation:
> comment definir le repere de mon image
Les position retournée par les fonction menbre de QMouseEvent telles que x (), y (), pos () sont relatives au widget qui a recu l'événement MouseEvent. Idéalement il te faudrait créer une classe dérivant de QLabel et y ajouter un slot connecté a MouseEvent de manière a récupérer les positions relatives a ce widget. Ou alors par calcul, en tenant compte de la position de ton image, de la taille de ton image, de ta fenêtre et de la position globale du curseur en déduire la position du curseur relative a ton image.

Citation:
> comment faire apparaitre les coordonnées et les valeurs de mes pixels
Le code donné précédemment te permet d'obtenir un QString contenant les informations de positions que tu peux ensuite utiliser selon tes besoins daffichage.
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 19h24   #28
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, je vous montre mon code comme vous me l'avez demander :


Code :
1
2
3
4
5
6
7
8
9
10
11
DManual2::DManual2(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::DManual2Class)
{
 
 
    ui->setupUi(this);
 
    connect(ui->BoutonOpenImage, SIGNAL(triggered()), this, SLOT(LoadImage())) ;
 
 
}
sachant que mon image est affiché dans un QScrollArea:

Code :
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
 
 
void DManual2::mouseMoveEvent(QMouseEvent *event)
 
{
  int posExactX ;
  int posExactY ;
  int posInitialeX = 629 ;
  int posInitialeY = 159 ;
  int lPositionX = event->x() - posInitialeX ;//ça me permet de reperer la premiere ligne de l'image
  int lPositionY = event->y() - posInitialeY ;//Permet de reperer la premeire colonne de l'image.
for(int l = 0; l < fxd.NbRows; ++l)//fxd.NbRows nombre de ligne de l'image
  {
      for(int k = 0; k < fxd.NbColumns; ++k)//fxd.NbColumns nombre de colonne de l'image
      {
        posExactX = lPositionX + l   ;
        posExactY = lPositionY + k ;
 
ui->scrollArea_2->hasMouseTracking() ;//Mon image s'affiche dans un scrollArea j'ai essayé de relier l'objet aux deplacement du curseur mais ??
 
// QWidget::mouseMoveEvent(event);
 
  ui->ZoneMouse->setText(QString("X = %1  Y = %2  Pixel = %3").arg( posExactX).arg(posExactY).arg(0)) ;
}
 
    }
j'ai essayé de faire une boucle suivant les lignes et les colonnes de l'image pour que quand le curseur sort de l'image rien ne s'affichera dans ce cas.et aussi pour pouvoir incrementer les deplacement du curseur.Les resultats que je trouve sont faux et que je detecte des valeurs a tous les endroit meme en dehors de l'image, ce qui n'est pas bon
help please
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 19h37   #29
Shugo78
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 895
Points : 895
Envoyer un message via MSN à Shugo78
Ce n'est pas la méthode que j'emploierais, mais si tu veux continuer dans la même voie, il te faut tester a chaque appel de ton slot que le curseur se trouve dans l'image par calcul comme tu le fais.

Sinon il te faudrait créer un widget personnalisé dérivant de QLabel dans lequel tu intégrerais un slot de gestion de MouseEvent de manière a obtenir directement la position de ton curseur relative a ton image qui ne serait appelé QUE lorsque ton curseur se trouve "dans" ton image t'épargnant des calculs laborieux.
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 20h47   #30
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 Shugo78 Voir le message
Ce n'est pas la méthode que j'emploierais, mais si tu veux continuer dans la même voie, il te faut tester a chaque appel de ton slot que le curseur se trouve dans l'image par calcul comme tu le fais.

Sinon il te faudrait créer un widget personnalisé dérivant de QLabel dans lequel tu intégrerais un slot de gestion de MouseEvent de manière a obtenir directement la position de ton curseur relative a ton image qui ne serait appelé QUE lorsque ton curseur se trouve "dans" ton image t'épargnant des calculs laborieux.
Je pense pas pouvoir faire ce que tu me dis car je suis debutant mais ça m'interesse vraiment comme methode.ça fait deja 1 semaine que je bidouille avec ma methode!Si tu veux vrement me rendre un service en exploitant ta methode ça serait cool!Sinon je continue avec le mien!
Encore merci!


ps: "C'est en s'attardant en bas que l'on monte plus haut "
lisco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 20h48   #31
superjaja
Rédacteur
 
Inscription : novembre 2006
Messages : 1 268
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 1 268
Points : 1 439
Points : 1 439
Citation:
Envoyé par Shugo78 Voir le message
Ce n'est pas la méthode que j'emploierais, mais si tu veux continuer dans la même voie, il te faut tester a chaque appel de ton slot que le curseur se trouve dans l'image par calcul comme tu le fais.

Sinon il te faudrait créer un widget personnalisé dérivant de QLabel dans lequel tu intégrerais un slot de gestion de MouseEvent de manière a obtenir directement la position de ton curseur relative a ton image qui ne serait appelé QUE lorsque ton curseur se trouve "dans" ton image t'épargnant des calculs laborieux.
+1 pour cette solution.
superjaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2009, 21h28   #32
Shugo78
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 895
Points : 895
Envoyer un message via MSN à Shugo78
C'est le principe selon lequel tout problème logiciel peut être résolu par lajout d'une nouvelle couche d'indirection. Je te conseillerais de partir sur cette structure de travail :
Code :
1
2
3
4
5
6
7
8
9
 
class monImage : public QLabel
{
     Q_OBJECT
public :
     monImage (QWidget *parent = 0) ;
protected :
     void mouseMoveEvent (QMouseEvent *event) ;
} ;
Il te reste a configurer le widget (regarde des tutoriels sur la création de widget personnalisés si tu doutes de toi) et dans ta réimplémentation de mouseMoveEvent et tu obtiendras les positions du curseur relatives a ton widget personnalisé.
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2009, 00h05   #33
yan
Rédacteur/Modérateur
 
Avatar de yan
 
Homme yan verdavaine
Ingénieur expert
Inscription : mars 2004
Messages : 9 885
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 885
Points : 13 811
Points : 13 811
voici un exemple avec les eventFilter. Perso, je trouve cela beaucoup plus propre


Code :
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
58
59
60
61
62
63
#include <QtGui>
 
class maWindow : public QMainWindow
{
    Q_OBJECT
    QLabel *m_label;
public :
maWindow()
{
    m_label = new QLabel(this);
   //maWindow servira de filtre sur les event du label
    m_label->installEventFilter(this);
    m_label->setMouseTracking (true);
    QScrollArea * scroll = new QScrollArea(this);
    {
        scroll->setWidget(m_label);
        setCentralWidget(scroll);
    }
    menuBar()->addAction("ouvrir image",this,SLOT(ouvrirImage()));
}
 
public slots :
    void ouvrirImage()
    {
        QString nom = QFileDialog::getOpenFileName(this,"ouvrir image");
        if ( ! nom.isEmpty() )
        {
            m_label->setPixmap( QPixmap (nom));
            m_label->resize(m_label->pixmap()->size());
        }
    }
protected :
    //filtre d'evenement
    bool eventFilter(QObject *obj,QEvent *ev)
    {
        //cast de obj en QLabel*
        QLabel *label = qobject_cast<QLabel *>(obj);
        //si object est un label et que l'evènement est généré par un mouvement de la souris
        if (label && ev->type() == QEvent::MouseMove)
        {
            //affiche la position courante de la souris dans le repère du label et donc de l'image
            QMouseEvent * mouseEvent = static_cast<QMouseEvent *>(ev);
            QString format = "position du pixel = %1  --  %2" ;
            statusBar()->showMessage( 
                                        format  .arg( mouseEvent->x() )
                                                .arg( mouseEvent->y() )
                                    );
        }
        // Comm l'on ne fait qu'observer les évènements, on appel la méthode par défaut.
        return QMainWindow::eventFilter(obj,ev);
    }
 
};
#include "main.moc"
 
int main(int argc, char **argv)
{
    QApplication app(argc, argv);   
    maWindow w;
    w.show();
 
    return app.exec();
}
yan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 20h02   #34
mahdigeo
Invité de passage
 
Homme Mehdi Ben
Étudiant
Inscription : novembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme Mehdi Ben
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : novembre 2012
Messages : 1
Points : 1
Points : 1
Par défaut et c'est encor plus simple

if (event->button() == Qt::LeftButton)
{
QMessageBox::information(this, tr("Coordonne X, Y"), tr("Pixel: X = %1. Y= %2.").arg(event->x()).arg(event->y())) ;
}
mahdigeo 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 22h58.


 
 
 
 
Partenaires

Hébergement Web