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 :

Creer un objet sur evenement souris


Sujet :

Qt

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 83
    Points
    83
    Par défaut Creer un objet sur evenement souris
    Bonjour à tous !

    Depuis ce début d'aprés midi, je galére a réussir un truc d'apparence tout simple : creer un objet (graphique) sur le clic du bouton gauche de la souris ...

    J'arrive a afficher un objet, j'arrive à le deplacer... mais impossible à concilier les 2.

    J'ai bien cru voir sur le forum que d'autres personnes rencontraient ce probléme, mais malgrès l'aide apporté, impossible d'y arriver dans mon cas (pour info, je souhaiterais faire cela à l'aide de QGraphicsView).

    Existe-t-il un tuto sur internet pour faire cela ?! Ou mieux encore, quelqu'un connaitrait-il un exemple du style de celui "diagramscene" de Qt, mais se limitant au strict nécessaire ?!

    Je sais, ce message n'est pas trés rempli, mais j'en suis au stade de saturation total :p

    Merci d'avance !

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Il faudrait que tu nous en dises un peu plus sur la méthode que tu utilises actuellement pour pouvoir vraiment cerner le problème. En attendant, quelques pistes:
    * Ne crée pas un objet lors du mousePressEvent. Crée le dans le mouseReleaseEvent si le temps écoulé écoulé entre le press et le release est inférieur à un certain delta (ie, si tu détectes un clic),
    * Si tu n'as pas reçu un mouseReleaseEvent avant ce delta, c'est que l'utilisateur maintient appuyé et il y a donc de fortes chances que ce soit pour déplacer. Tu passes en mode "déplacer" après delta ms.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 83
    Points
    83
    Par défaut
    Hello !

    Merci pour ta réponse, mais en faite j'en suis pas encore la :p

    Pour l'instant, j'en suis encore a essayer d'afficher quelque chose sur un clic.

    A priori, je n'arrive même pas a récuperer un event avec "QGraphicsSceneMouseEvent" ...

    Dans le code suivant je cherche a faire que sur un clic dans ma "scene", je LineEdit se remplisse de la phrase "Test" :

    MainWindow.h
    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
     
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QtGui/QMainWindow>
    #include <QGraphicsScene>
    #include <QtGui>
    class Scene;
     
    QT_BEGIN_NAMESPACE
    class QGraphicsView;
    QT_END_NAMESPACE
     
    class MainWindow : public QMainWindow
    {
            Q_OBJECT
    public:
        MainWindow(QWidget *parent = 0);
        QLineEdit *coodX;
     
    private:
        Scene *scene;
        QGraphicsView *view;
     
    protected:
        void mousePressEvent(QGraphicsSceneMouseEvent *event);
    };
     
    #endif // MAINWINDOW_H
    MainWindow.cpp
    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
    #include <QtGui>
    #include <QLabel>
    #include <QLineEdit>
     
    #include "mainwindow.h"
    #include "scene.h"
     
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        scene = new Scene();
        scene->setSceneRect(QRectF(0, 0, 500, 500));
        QHBoxLayout *layout = new QHBoxLayout;
        QLineEdit *coodX = new QLineEdit;
        view = new QGraphicsView(scene);
        layout->addWidget(coodX);
        layout->addWidget(view);
        view->setRenderHint(QPainter::Antialiasing);
        scene->setBackgroundBrush(QPixmap(":/images/cheese.jpg"));
     
        view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
     
        QWidget *widget = new QWidget;
        widget->setLayout(layout);
     
        setCentralWidget(widget);
        setWindowTitle(tr("Diagramscene"));
    }
     
     
    void MainWindow::mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        coodX->insert("Test");
    }
    Quand je clic dans le MainWindow, rien ne se passe.

    Je n'est pas mis tout les fichiers, à savoir qu'il existe aussi "Scene.cpp"(conteneur) et "Mouse.cpp" (objet à afficher, pompé des exemples celui ci !). Ceux ci fonctionne parfaitement : a la creation de la "scene" j'arrive a generer plusieurs "Mouse" sans probléme.

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Voici les remarques que j'ai pour l'instant:
    * ta variable coordx n'est pas initialisée dans le slot. Vu que tu spécifies le type dans le constructeur, tu masques la variable de ta classe. (au passage, pourquoi en faire un membre public ?)

    * la méthode mousePressEvent ne correspond pas au type que tu devrais avoir. En la réimplémentant dans une classe dérivant de QWidget, tu *dois* utiliser la définition de QWidget. Là, tu utilises le prototype tel que défini dans QGraphicsScene. Il faut donc que tu dérives une classe de cette dernière pour y réimplémenter cet méthode avec la signature que tu veux.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 83
    Points
    83
    Par défaut
    Merci, finalement en reprenant mon code du début, j'ai pu reussir ce que je voulais !

    Merci pour l'aide !

Discussions similaires

  1. Evenements souris sur JPanel
    Par nemo_str dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 07/05/2008, 15h35
  2. Evenement sur déplacement souris !
    Par Pharmacos dans le forum IHM
    Réponses: 6
    Dernier message: 29/02/2008, 10h05
  3. evenement souris sur clip multiples
    Par jc_cornic dans le forum Flash
    Réponses: 4
    Dernier message: 31/03/2007, 13h24
  4. Pb. evenement sur position souris
    Par azorol dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/02/2007, 11h27
  5. [SWING] Evenement (souris) sur un objet Chartpanel
    Par rprom1 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 20/04/2006, 10h10

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