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 :

Evenement sur QGraphics view


Sujet :

Qt

  1. #1
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut Evenement sur QGraphics view
    Bonjours je fais un programme qui utilise les QGraphicsView mon problème est que je n'arrive pas attacher d'évenements sur une QGraphicsview

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     connect (graphicsView, SIGNAL(mousePressEvent ()),this,SLOT(cherche()));
    graphicsview existe vu que je charge une scene avec une phote a l'intérieur elle est dans l'ihm.

    le slot cherche marche vu que je men sert un bouton est qu'il n'y a aucun problème.

    Le problème viens a mon avis du Signal car même si je remplace par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect (graphicsView, SIGNAL(clicked()),this,SLOT(cherche()));
    Cela ne change rien quand je clique sur mon QGraphicView rien ne se passe.


    Merci.

    PS:Le but final étant de pouvoir faire une sélection rectangulaire sur l'image afficher dans la QGraphicView afin de rogner l'image.

  2. #2
    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
    L'ideal serait que tu donnes plus de codes et surtout comment tu as déclaré tes signaux/slots.
    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.

  3. #3
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Tu peux me montrer où est-ce que tu as vu que QGraphicsView possédait ces signaux ?
    (en l'occurence, la classe n'a pas de signal en dehors de celui de QWidget là, toute la gestion des classes relatives aux graphics views se faisant via la redéfinition des fonctions xxxYyyEvent (genre mousePressEvent).

  4. #4
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    Tout d'abord merci pour vos réponses.

    Citation Envoyé par superjaja Voir le message
    L'ideal serait que tu donnes plus de codes et surtout comment tu as déclaré tes signaux/slots.
    Le code du slot cherche marche vu que je m'en sert un bouton le voila
    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
     
    Déclaration: 
    private slots:
                   void cherche();
     
    dans le .cpp
     
    void mainInt::cherche()
    {
     
     
        QFileInfo  stock;
        QString directory = QFileDialog::getExistingDirectory(this,
                                                              tr("Sélectionner Dossier Photo"), QDir::currentPath());
        QDir select(directory);
        select.setFilter(QDir::Files);
        QFileInfoList list = select.entryInfoList();
     
     
        for(int i=0;i<list.size();i++)
        {
            stock = list.at(i) ;
     
            if(controle(stock))
            {
                creationListe(stock.absoluteFilePath (),i,stock.baseName());
     
            }
        }
        aChercher=true;
    }
    Puis la déclaration du signal ben j'utilise juste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect (graphicsView, SIGNAL(mousePressEvent ()),this,SLOT(cherche()));

    Citation Envoyé par Alp Voir le message
    Tu peux me montrer où est-ce que tu as vu que QGraphicsView possédait ces signaux ?
    (en l'occurence, la classe n'a pas de signal en dehors de celui de QWidget là, toute la gestion des classes relatives aux graphics views se faisant via la redéfinition des fonctions xxxYyyEvent (genre mousePressEvent).
    J'ai vut mousePressEvent dans la doc, car dans la doc il dise que QGraphicsView hérite de 37 fonctions de Qwidget, donc j'ai pensé que je pouvai les utiliser de la même façon.
    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
    35
    36
    37
    38
    39
    40
     
    Protected Functions
     
    virtual void actionEvent ( QActionEvent * event )
    virtual void changeEvent ( QEvent * event )
    virtual void closeEvent ( QCloseEvent * event )
    virtual void contextMenuEvent ( QContextMenuEvent * event )
    void create ( WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true )
    void destroy ( bool destroyWindow = true, bool destroySubWindows = true )
    virtual void dragEnterEvent ( QDragEnterEvent * event )
    virtual void dragLeaveEvent ( QDragLeaveEvent * event )
    virtual void dragMoveEvent ( QDragMoveEvent * event )
    virtual void dropEvent ( QDropEvent * event )
    virtual void enterEvent ( QEvent * event )
    virtual bool event ( QEvent * event )
    virtual void focusInEvent ( QFocusEvent * event )
    bool focusNextChild ()
    virtual bool focusNextPrevChild ( bool next )
    virtual void focusOutEvent ( QFocusEvent * event )
    bool focusPreviousChild ()
    virtual void hideEvent ( QHideEvent * event )
    virtual void inputMethodEvent ( QInputMethodEvent * event )
    virtual void keyPressEvent ( QKeyEvent * event )
    virtual void keyReleaseEvent ( QKeyEvent * event )
    virtual void leaveEvent ( QEvent * event )
    virtual bool macEvent ( EventHandlerCallRef caller, EventRef event )
    virtual int metric ( PaintDeviceMetric m ) const
    virtual void mouseDoubleClickEvent ( QMouseEvent * event )
    virtual void mouseMoveEvent ( QMouseEvent * event )
    virtual void mousePressEvent ( QMouseEvent * event )
    virtual void mouseReleaseEvent ( QMouseEvent * event )
    virtual void moveEvent ( QMoveEvent * event )
    virtual void paintEvent ( QPaintEvent * event )
    virtual bool qwsEvent ( QWSEvent * event )
    virtual void resizeEvent ( QResizeEvent * event )
    virtual void showEvent ( QShowEvent * event )
    virtual void tabletEvent ( QTabletEvent * event )
    virtual void wheelEvent ( QWheelEvent * event )
    virtual bool winEvent ( MSG * message, long * result )
    virtual bool x11Event ( XEvent * event )
    Si tu as un exemple de redéfinition des fonction event j'aimerai bien le voir par ce que je n'ai pas bien compris ce passage.

    Merci a Vous.

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    mousePressEvent n'est pas un signal. Si tu redéfinis cette fonction dans ta classe, alors ce sera ta redéfinition qui sera appelée dès qu'on clickera (quand on presse le bouton, pas quand on le relache, sinon ça serait mouseReleaseEvent).

    Je suis sûr qu'on a quelque chose à ce sujet dans la FAQ

    Mais en tout cas, mousePressEvent c'est une fonction protected que tu peux redéfinir, pas un signal.

  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
    Citation Envoyé par Alp Voir le message
    mousePressEvent n'est pas un signal. Si tu redéfinis cette fonction dans ta classe, alors ce sera ta redéfinition qui sera appelée dès qu'on clickera (quand on presse le bouton, pas quand on le relache, sinon ça serait mouseReleaseEvent).

    Je suis sûr qu'on a quelque chose à ce sujet dans la FAQ

    Mais en tout cas, mousePressEvent c'est une fonction protected que tu peux redéfinir, pas un signal.
    Effectivment j'ai un peu de mal en ce moment j'avais meme pas vu le problème...
    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 régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par Alp Voir le message
    Si tu redéfinis cette fonction dans ta classe, alors ce sera ta redéfinition qui sera appelée dès qu'on clickera
    Ok j'ai donc essayer de redefinir ma classe comme ceci:

    Dans le .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
     
     
    #include <QGraphicsScene>
    #include <QGraphicsView>
    #include "chargementphoto.h"
    class graphicSceneAmeliorer: public QGraphicsScene
    {
        public:
        graphicSceneAmeliorer();
     
    protected:
      void mousePressEvent ( QMouseEvent * e );
     
     };
    Dans le .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
     
     
    #include "graphicviewameliorer.h"
     
    graphicSceneAmeliorer::graphicSceneAmeliorer():QGraphicsScene()
    {
     
    }
    void graphicSceneAmeliorer::mousePressEvent(QMouseEvent * e )
    {
    chargementPhoto maCharg;
    maCharg.exec();
     
    }
    puis dans le minWindow.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
     
    void mainInt::affiche()
    {
     
       graphicSceneAmeliorer * scene;
        QObject* bouton;
        bouton=sender();
        QPixmap image(bouton->objectName());
        imageCourante=new QPixmap(image);
     
        QRectF bounds(visioGv->sceneRect());
        scene = new graphicSceneAmeliorer(visioGv);
        scene->addPixmap(image);
        visioGv->setScene(scene);
        visioGv->show();
    }
    Le problème est que lors de la compilation il me renvoi

    :-1: error: collect2: ld returned 1 exit status

    et j'ai bien vérifier aucun processus n'est ouvert mon application est bien fermer il peut acceder au .exe pour le modifier ou le remplacer.

    Je ne comprend pas pour quoi il me sort cette erreur.

    Merci.

  8. #8
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    J'ai réussi a régler mon problème en fait j'avais mal déclaré le constructeur.

    Donc maintenant le programme compile mais quand je clique sur ma QGraphicView dans laquelle est afficher ma scene sa ne fait rien alors que sa devrai afficher une dialog.

    Voici le nouveau code:

    Dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <QGraphicsScene>
    #include <QGraphicsView>
    #include "chargementphoto.h"
    class graphicSceneAmeliorer: public QGraphicsScene
    {
        public:
        graphicSceneAmeliorer(QGraphicsView * parent);
     
    protected:
      void mousePressEvent ( QMouseEvent * e );
     
     };
    Dans le .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
     
     
    #include "graphicviewameliorer.h"
     
    graphicSceneAmeliorer::graphicSceneAmeliorer(QGraphicsView * parent):QGraphicsScene(parent)
    {
     
    }
    void graphicSceneAmeliorer::mousePressEvent(QMouseEvent * e )
    {
    chargementPhoto maCharg;
    maCharg.exec();
     
    }
    et dans le 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
     
     
       graphicSceneAmeliorer * scene;
        QObject* bouton;
        bouton=sender();
        QPixmap image(bouton->objectName());
        imageCourante=new QPixmap(image);
     
        QRectF bounds(visioGv->sceneRect());
        scene = new graphicSceneAmeliorer(visioGv);
        scene->addPixmap(image);
        visioGv->setScene(scene);
        visioGv->show();
    Voila lorsque je suis sur ma scene et que je presse le bouton de la souris rien ne se passe.


    Merci a vous.

Discussions similaires

  1. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 14h58
  2. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56
  3. Réponses: 5
    Dernier message: 03/11/2004, 21h44
  4. Evenement sur les barres de défilement d'une ScrollBox
    Par Nico118 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/05/2004, 14h56
  5. [FLASH MX 2004] [ecouteur] evenements sur un clip
    Par marco_ dans le forum Flash
    Réponses: 2
    Dernier message: 30/04/2004, 13h28

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