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

Discussion :

Dérivation de QGraphicsView pour utiliser drawBackGround()

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 280
    Par défaut Dérivation de QGraphicsView pour utiliser drawBackGround()
    Depuis une dizaine de jours, je bloque sur l'utilisation de QGraphicsScene::drawBackground

    mon code fonctionnel avant tentative utilisation drawBackgound:

    mycode.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    scene = new QGraphicsScene();
    view = new QGraphicsView(scene);
    QImage image.load(filename);
    QPixmap pix=QPixmap::fromImage(image);
    QPainter *painter=new QPainter(&pix);
    QGraphicsPixmapItem *img_fond=scene->addPixmap(pix);
    le code avec tentative ajout drawBackground

    mycode.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    scene = new myscene();
    view = new QGraphicsView(scene);
    QImage image.load(filename);
    QPixmap pix=QPixmap::fromImage(image);
    QPainter *painter=new QPainter(&pix);
    scene->drawBackground(painter,scene->rect());
    view->setScene(scene);  // utile ?
    mycode_scene.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
     
    #ifndef MYCODESCENE_H
    #define MYCODESCENE_H
     
    #include <QGraphicsScene>
     
    class myscene : public QGraphicsScene
    {
      Q_OBJECT
    public:
    myscene();
    virtual void drawBackground ( QPainter * painter, const QRectF & rect );
    ~myscene();
    }
    ;
     
    #endif
    mycode_scene.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
     
    #include <QtGUI>
    #include "mycode_scene.h"
     
    myscene::myscene()
    {
      qDebug()<<"constructeur myscene";
    }
     
    void myscene::drawBackground ( QPainter * painter, const QRectF & rect )
    {
      qDebug()<<"appel drawbackground";
      QGraphicsScene::drawBackground(painter,rect);
    }
     
    myscene::~myscene()
    {
      qDebug()<<"destructeur myscene";
    }
    Dans la console, j'ai bien l'affichage de "appel drawBackground" et même plusieurs fois, par contre mon img de fond ne s'affiche pas.

    Merci de bien vouloir m'aider, ça fait 10 jours que je suis là dessus. ( heureusement pas à plein temps mais bon )

    Par ailleurs, le fait que la fonction drawBackground soit protected et non pas public signifie t"elle qu'il ne vaut mieux pas l'utiliser.

    A la base je tente d'utiliser cette fonction pour récupérer après la position de la souris dans ma scene/view. A savoir que l'itemAt retourné me donne toujours l'image et non pas les autres éléments (QGraphicsRectItem)
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 145
    Par défaut
    Oublie l'utilisation de QPainter hors GraphicsViewDérivée::drawBackground().
    Lorsque tu dois redéfinir une méthode virtuelle protected, redéfinis-la, ne l'appelle pas depuis une autre classe (impossible de toute façon).

    Tu as un pointeur sur QPainter passé en paramètre de drawBackgroud. Utilise-le dans la fonction, tout simplement

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 280
    Par défaut pas tout compris
    Merci pour ta réponse Gilbert.

    Si j'ai bien compris ce que tu m'a dis je ne peux pas utiliser la fonction drawBackgroud de base mais suis obligé de de créer la mienne ?

    À la base, je cherche juste à sélectionner des items précis hors image de fond. (cf. mon post du 04/09 auquel tu m'avais d'ailleurs répondu).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 145
    Par défaut
    Si j'ai bien compris ce que tu m'a dis je ne peux pas utiliser la fonction drawBackgroud de base mais suis obligé de de créer la mienne ?
    C'est tout à fait ça Et tu l'as déjà fait, mais tu as juste affiché quelque chose dans la sortie de qDebug.

    Reprend ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void myscene::drawBackground ( QPainter * painter, const QRectF & rect )
    {
      painter->drawPixmap(rect, <taPixmap>, <rectangleATracerDeTaPixmap>)
      QGraphicsScene::drawBackground(painter,rect);
    }
    La documentation de QPainter::drawPixmap.

    Tu peux aussi utiliser QPainter::drawImage, ce sont les mêmes paramètres.

    À la base, je cherche juste à sélectionner des items précis hors image de fond. (cf. mon post du 04/09 auquel tu m'avais d'ailleurs répondu).
    Je pensais que le problème venait de la position de l'événement de souris qui n'était pas exprimée en coordonnées de scène, mais apparemment non puisque ça n'a pas marché de ton côté.

    Si ce que je t'ai proposé ci-dessus ne marche pas, passe en message privé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dérivation de QGraphicsView::drawBackGround
    Par Christophe dans le forum Débuter
    Réponses: 2
    Dernier message: 18/09/2013, 20h49
  2. Nom de Champ dans une table pour utiliser For/Next
    Par Mulele dans le forum Access
    Réponses: 6
    Dernier message: 30/10/2004, 13h28
  3. [DLL] Utilisation d'une DLL pour utiliser serveur Firebird
    Par sekiryou dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2004, 14h20
  4. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21
  5. VCL de Crystal Report pour utilisation dans C++Builder
    Par dibak dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/02/2004, 17h04

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