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 :

Avoir une QGraphicsScene exactement de la taille du Widget conteneur, sans barre de défilement [Graphics View]


Sujet :

Qt

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 921
    Points : 220 492
    Points
    220 492
    Billets dans le blog
    127
    Par défaut Avoir une QGraphicsScene exactement de la taille du Widget conteneur, sans barre de défilement
    Bonjour,

    J'aimerai avoir une QGraphicsScene qui aurait exactement la taille de mon conteneur et qui n'aurait donc pas de scroll bar.

    Ma hiérarchie est la suivante :

    QWidget -> QStackedLayout -> QGraphicsView -> Scène : QGraphicsScene

    Qu'en pensez vous ?
    J'aimerai que ce soit effectif pour n'importe quelle résolution.

    Merci

    EDIT :

    J'avais aussi tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void GameWidget::resizeEvent(QResizeEvent* pEvent)
    {
        m_scene.setSceneRect(0,0,m_view.width()/*-10*/,m_view.height()/*-10*/);
        m_scene.resize();
     
    }
    Le problème du -10 , c'est que cela ne fonctionne que pour une architecture et en plus c'est barbare

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 631
    Points : 30 707
    Points
    30 707
    Par défaut
    Salut,

    Grâce à son héritage avec QAbstractScrollArea (et donc avec QWidget), la QGraphicsView dispose d'une fonction contentsMargins() qui renvoie un QMargin, qui contient elle même la valeur associée aux marges haute, basse, gauche et droite utilisées pour le widget en question.

    En soustrayant les valeurs top() et bottom() issue de la QMargin de la hauteur de ta QGraphicsView et les valeur left() et right() issues de la QMagrin de la largeur de ta QGraphicsView, tu devrait pouvoir obtenir les dimensions susceptibles de rentrer dans ta QGraphicsView sans forcer l'apparition des scrollbars

    Cela donnerait quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void GameWidget::resizeEvent(QResizeEvent* pEvent)
    {
        /* je détaille, c'est plus facile à lire :D */
        QMargin marge = contentsMargins();
        int top = marge.top();
        int bottom = marge.bottom();
        int left = marge.left();
        int right = marge.right();
        int width = m_view.width()-(top + bottom);
        int height = ,m_view.height() - (left + right);
        m_scene.setSceneRect(0,0,width, height);
        m_scene.resize();
    }
    Le cas échéant, tu peux peut etre encore retirer "un tout petit peu plus" (genre 1 ou 2 pixels) aux valeurs obtenues afin d'être tout à fait sur

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 921
    Points : 220 492
    Points
    220 492
    Billets dans le blog
    127
    Par défaut
    Les marges sont de 0 (dans toutes les dimensions).
    Le truc, c'est que je place (et j'essaie de placer) les éléments de la scène, sur la globalité de l'écran (sans laisser aucun espace), mais que si je m'approche trop du bord, ça créer des scrollbar.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 631
    Points : 30 707
    Points
    30 707
    Par défaut
    N'oublie pas que tout widget est susceptible de contenir un layout, et que ce layout a lui aussi des marges

    Si ce n'est pas au niveau de la vue, ca peut etre au niveau du layout sous jascent

    Sinon, tu peux normalement aussi indiquer qu'il ne faut pas créer de scrollbar (par contre, je n'ai plus la fonction qui le permet en tete)

    Dans ce ca, fais, cependant, attention au fait que, si tu calcule mal les dimensions, une partie de la vue sera cachée

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 921
    Points : 220 492
    Points
    220 492
    Billets dans le blog
    127
    Par défaut
    Pour désactiver les scrollbars, qui se trouvent au niveau de la QGraphicsView -> setHorizontalScrollBarPolicy et setVerticalScrollBarPolicy.

    Et j'imagine que cela suffira, après, c'est à moi de bien dessiner dans la zone que me retourne le sceneRect.

  6. #6
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 662
    Points
    662
    Par défaut
    Oui il faut utiliser les méthodes : setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy) et setVerticalScrollBarPolicy(Qt::ScrollBarPolicy) dans le classe QAbstractScrollArea (http://qt-project.org/doc/qt-4.8/qab...BarPolicy-prop)
    avec en paramètre Qt::ScrollBarAlwaysOff car de base ça doit être Qt::ScrollBarAsNeeded

    EDIT : OUPS Grillé \o/

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 921
    Points : 220 492
    Points
    220 492
    Billets dans le blog
    127
    Par défaut
    Merci à vous.
    C'est bien Qt::ScrollBarAsNeeded par défaut, mais bizarrement, il les activaient tout le temps

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 631
    Points : 30 707
    Points
    30 707
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Merci à vous.
    C'est bien Qt::ScrollBarAsNeeded par défaut, mais bizarrement, il les activaient tout le temps
    Ben, justement, la valeur qui t'intéresse est Qt::ScrollBarAlwaysOff pour que la scrollbar soit purement et simplement désactivée sur ta vue

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 921
    Points : 220 492
    Points
    220 492
    Billets dans le blog
    127
    Par défaut
    Oui, je sais bien. Je disais que pour un "AsNeeded" (lorsque besoin), il les mettaient toujours (sous entendu, même lorsque je pense qu'il n'en a pas besoin).

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2014, 17h50
  2. Avoir un cadre exactement au contour d'une figure
    Par max0u86 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 30/09/2008, 14h27
  3. Réponses: 3
    Dernier message: 13/09/2008, 20h23
  4. [Administration] [Export] Avoir une copie exacte du référentiel
    Par Bisûnûrs dans le forum Subversion
    Réponses: 3
    Dernier message: 26/03/2008, 19h07
  5. Comment avoir une fonte de très grande taille ?
    Par Gébix dans le forum Mise en forme
    Réponses: 2
    Dernier message: 13/01/2007, 19h47

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