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 :

Une délimitation inattendue

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut Une délimitation inattendue
    Bonjour,

    je possède une vue transparente définie dans une fenêtre principale sans volontairement lui passer de parent (mais là n'est pas le problème) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      _vue = new Vue();
      _vue->setGeometry(0, 0, 1657, 981);
      _vue->setVisible(true);
       _vue->setWindowFlags(Qt::FramelessWindowHint |
                                   Qt::WindowStaysOnTopHint);
      _vue->show();
    Ma vue se construit de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Vue::Vue(QWidget* parent) : QGraphicsView(parent){
     
      _scene = new Scene(this);
      setScene(_scene);
      setMouseTracking(true);
      setAttribute(Qt::WA_TranslucentBackground);
      setStyleSheet("background : transparent");
    }
    * Dedans, je dessine des figures en cliquant mais alors des barres apparaissent sur la vue comme une sorte de délimitation alors que ma vue a une taille qui fait tout l'espace gris (et la scène est illimitée par défaut) (image 1). Dés que je sors de ce cadre, la polyline ne se poursuit plus et est coupée puis, si je repasse dedans, ça trace le bout de ligne qui se trouve dedans.

    * Si je clic ensuite en dehors de mon application, les coupures disparaissent (image 2)(se serait donc une mise à jour à faire sur la vue non ? ça ressemble au prepareGeometryChange on dirait). Mais les barres verticales persistent.
    Edit : Pour ce point, c'est en fait un update sur la scène qui manque.

    * Si je scroll alors un peu ma vue, les barres disparaissent et reprennent seulement aux prochains clics (image 3).

    Une idée sur ces comportements ?

    Apparemment, mon problème se situerait dans la réimplémentation de drawBackground de ma vue dans laquelle je fais un "drawRect(rect)". Le rect ne correspond pas à sceneRect. Si je fixe sceneRect, plus aucun problème. Mais si je veux que ma scène soit illimitée et donc que je n'ai pas de sceneRect ? :S

    Merci beaucoup
    Images attachées Images attachées    

  2. #2
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Bonjour,

    pour apporter la réponse à mon problème, en fait, si je veux une scène illimitée et donc ne pas avoir à appeler sceneRect() dans la méthode drawBackground de ma vue que je réimplémente, je peux utiliser d'après la documentation itemsBoundingRect() qui permet d'utiliser toutes les régions définies pour nos objets à l'intérieur de la scène. Seul soucis, cette méthode semble être assez couteuse :

    If the scene rect is unset, QGraphicsScene will use the bounding area of all items, as returned by itemsBoundingRect(), as the scene rect. However, itemsBoundingRect() is a relatively time consuming function, as it operates by collecting positional information for every item on the scene. Because of this, you should always set the scene rect when operating on large scenes.
    Petite question néanmoins sur une phrase trouvée dans la documentation traduite ici :

    Tous les événements souris et glisser-déposer sont originellement reçus en coordonnées de vue et vous devez les convertir en coordonnées de scène pour interagir avec les éléments de la scène.
    Je ne comprends pas bien ici et justement. Quand je réimplémente mousePressEvent(QGraphicsSceneMouseEvent), et que je récupère e->scenePos(), la convertion est déjà faite en coordonnées scène quand je clic à un endroit dans ma vue non ?

    Merci !

Discussions similaires

  1. [XL-2010] Liens hypertexte / une erreur inattendue s'est produite
    Par GADENSEB dans le forum Excel
    Réponses: 2
    Dernier message: 21/05/2014, 15h26
  2. Réponses: 7
    Dernier message: 06/05/2010, 17h58
  3. Réponses: 4
    Dernier message: 30/04/2009, 14h13
  4. Une rotation inattendue
    Par lykim dans le forum OpenCV
    Réponses: 2
    Dernier message: 15/03/2007, 23h25
  5. [VBA][Excel] importer une zone délimitée de texte
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 14h59

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