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 :

Position de la souris


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Position de la souris
    Bonjour,

    J'ai commencé il y a peu à m'autoformer sur Qt.
    Après avoir achevé la lecture de tutoriel Qt, j'ai décidé de commencer à créer un logiciel de traitement d'image.

    Le but étant d'apprendre à créer une IHM avec Qt et d'allier ce projet avec ma spécialité : l'Imagerie Numérique.

    Ce logiciel n'a pas de valeur commercial, je copie donc chaque mécanique du logiciel d'Adobe afin de m'entrainer et également car cela me donne un résultat à comparer avec mon propre logiciel.

    J'ai commencé par créer mon IHM avec Qt Designer, j'ai ajouté un menu, une ToolBar, deux dockWidget (Outils dessin à gauche et Calques à droite).

    Au centre de ma fenêtre, j'ai ajouté une mdiArea pour pouvoir afficher plusieurs images (QVector).

    Lorsque l'utilisateur clique sur nouveau, une boite de dialogue s'ouvre et l'on peut choisir la taille de son image.
    Voici à quoi ça ressemble:



    Je gère la partie graphique avec les classes "QGraphicsScene", "QGraphicsView" que j'ajoute dans un container (QMdiSubWindow)

    Pour l'instant, trois outils sont disponible (Cercle/Ellipse, Carré et Zoom).
    Je récupère la position du curseur lors du clic et je place un cercle ou un carré à l'endroit souhaité. Pour le zoom, j'utilise la fonction "scale()".

    Malheureusement deux problèmes se posent à moi.

    1-Seul le clic droit est détecté par Qt

    j'ai évident surchargé les méthodes "mousePressEvent" et "mouseReleaseEvent"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void MainWindow::mousePressEvent(QMouseEvent* _event)
    {
        m_bClick = true;
        m_pCursorPoint = _event->globalPos();
        emit MouseClick();
    }
    void MainWindow::mouseReleaseEvent(QMouseEvent*)
    {
        m_bClick = false;
    }
    2-Le cercle/carré n'est pas du tout positionné au bon endroit.

    J'ai bien tenté de calibrer en soustrayant par la taille de mon image mais ça ne marche pas sur toutes les dimensions d'image (400 par 400 : OK, 800 par 800 : PAS OK)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void Drawing::DrawEllipse(QPoint _pCursorPoint, QColor _color)
    {
        int h = 50, w = 50;
        QPen pen(_color, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
        this->m_graphicsScene->addEllipse(_pCursorPoint.x()-m_width, _pCursorPoint.y()-m_height+h, w, h,pen);
    }
    Comme vous pouvez le constater, les events souris sont traités dans ma MainWindow et le this du connect est donc ma MainWindow elle même. J'ai pensé que ce serait une bonne idée de déplacé ses évents dans la classe drawing mais malheureusement, je ne détecte plus aucun clic à présent...
    j'ai déjà arpenté le web de long en large et demandé de l'aide sur les forums, mais personne n'a trouvé de solution à mon problème.
    J'espère donc trouver ici quelqu'un à même de m'aider.
    Bon weekend à tous.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 145
    Points : 392
    Points
    392
    Par défaut
    Pour ton problème de clic, je pense que tu devrais utiliser QMouseEvent::button() et comparer la valeur de retour avec Qt::RightButton et Qt::LeftButton.

    Pour la position du curseur, de mémoire il faut convertir les coordonnées en coordonnées de scène avec QGraphicsView::mapToScene(...).

    Ou tu peux redéfinir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mousePressEvent(QGraphicsSceneMouseEvent *)
    dans une classe dérivée de QGraphicsScene et utiliser QGraphicsSceneMouseEvent::scenePos()

Discussions similaires

  1. nom d'un controle et position de la souris
    Par manu80000 dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2006, 16h12
  2. [C#]Drag & Drop, problème de position de la souris
    Par debug dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/10/2005, 13h06
  3. Position de la souris
    Par abcd dans le forum Langage
    Réponses: 10
    Dernier message: 31/03/2005, 18h09
  4. Déterminer la position de la souris
    Par genteur slayer dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 11h01
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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