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 Quick Discussion :

GridLayout dans ScrollView


Sujet :

Qt Quick

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut GridLayout dans ScrollView
    à tous,

    J'ai besoin de disposer plusieurs items dans un scrollview. Pour me simplifier la vie je pense à utiliser un GridLayout. Malheureusement je ne parviens pas à obtenir un résultat correct.

    Voici un exemple de mon code :
    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
    import QtQuick 2.2
    import QtQuick.Layouts 1.1
    import QtQuick.Controls 1.1
     
     
    //GroupBox{
        //title: qsTr("Rapport d'intervention")
        ScrollView{
            //anchors.fill: parent
            GridLayout {
                id: gridInter
                width : parent.width
                height: parent.height
                columns: 3
                Label{
                    text : "Points de contrôles"
                    Layout.fillWidth : true
                }
                Label{
                    text : "Conformité"
                    Layout.fillWidth : true
                }
                Label{
                    text : "Commentaires"
                    Layout.fillWidth : true
                }
            //}
        }
    }
    Vous constaterez la présence d'un GroupBox. Dans le projet, mon scrollview est dans un cet item. J'ai fait plusieurs tests en commentant - décommentant certaines lignes, mais rien n'y fait. Je joins deux screens de ce que j'obtiens.
    Nom : capture5.png
Affichages : 994
Taille : 36,7 Ko
    Nom : capture4.png
Affichages : 1019
Taille : 35,4 Ko

    Quelqu'un aurait une piste ?

    D'avance merci.

    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Points : 189
    Points
    189
    Par défaut
    Salut,
    Pour qu'un ScrollView fonctionne, la taille de son contenu doit être déterminée pour savoir quoi "scroller".

    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
    import QtQuick 2.2
    import QtQuick.Layouts 1.1
    import QtQuick.Controls 1.1
     
    GroupBox {
        title: qsTr("Rapport d'intervention")
        ScrollView {
            GridLayout {
                id: gridInter
                width: 260
                height: 210
                columns: 3
                Label{
                    text : "Points de contrôles"
                    Layout.fillWidth : true
                }
                Label{
                    text : "Conformité"
                    Layout.fillWidth : true
                }
                Label{
                    text : "Commentaires"
                    Layout.fillWidth : true
                }
            }
        }
    }

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    Ça fonction nikel. Je comprends pas pourquoi je suis passé à coté de ça.

    Merci à toi.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    Je déterre ce sujet car je reprends le projet sur lequel j'étais à l'époque.
    Pour faire simple :
    • dans un GridLayout je dispose x items. En fonction de la taille de la fenêtre les items sont redimensionné correctement.
    • si la fenêtre atteint est trop redimensionnée vers le "bas" (c'est à dire trop petite), j'aimerai pouvoir scroller celle-ci afin d'avoir un rendu correct et de maintenir une taille de mes items cohérentes.


    Je ne parviens pas à trouver un moyen simple de faire ceci. Actuellement j'en suis à ça :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    import QtQuick 2.2
    import QtQuick.Layouts 1.1
    import QtQuick.Controls 1.1
     
     
    Rectangle {
     
        Component.onCompleted: scroll.contentItem = contener
     
     
        function scrollChange(){
            if ((width > 600) && (height > 600)){
                scroll.contentItem = itemNull
                contener.width = width
                contener.height = height
            }
            else{
                scroll.contentItem = contener
            }
        }
     
        function widthChange(){
            if (width > 600){
                scroll.contentItem = itemNull
                contener.width = width
            }
            if (width < 600){
                scroll.contentItem = contener
            }
        }
     
        function heightChange(){
            if (height > 600){
                scroll.contentItem = itemNull
                contener.height = height
            }
            if (height < 600){
                scroll.contentItem = contener
            }
        }
     
        onWidthChanged: scrollChange()
        onHeightChanged: scrollChange()
     
        ScrollView {
            id : scroll
            anchors.fill : parent
        }
     
        Item{id :itemNull}
     
        Rectangle {
            id: contener
            width : 600
            height: 600
            GridLayout {
                id: grid
                columns: 3
                anchors.fill :contener
                Rectangle { color : "blue" ; Layout.fillHeight: true ; Layout.fillWidth: true }
                Rectangle { color : "green"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
                Rectangle { color : "red"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
                Rectangle { color : "yellow"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
                Rectangle { color : "black"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
                Rectangle { color : "brown"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
            }
        }
    }
    Quelqu'un aurait une piste ou une astuce pour faire ce que je veux, car là le rendu est pas top-top.

    Bonne soirée à tous.

    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Points : 189
    Points
    189
    Par défaut
    Salut,
    Comme cela :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    import QtQuick 2.2
    import QtQuick.Layouts 1.1
    import QtQuick.Controls 1.1
     
     
    Rectangle {
    	Component.onCompleted: scroll.contentItem = contener
     
    	function scrollChange(){
                    if ((width > 600) && (height > 600)){
                            if(scroll.contentItem != itemNull) scroll.contentItem = itemNull
                            contener.width = width
                            contener.height = height
                    } else if ((width < 600) && (height < 600)){
                            if(scroll.contentItem != contener) scroll.contentItem = contener
                            contener.width = 600
                            contener.height = 600
                    } else if ((width < 600)){
                            if(scroll.contentItem != contener) scroll.contentItem = contener
                            contener.width = 600
                            contener.height = height
                    } else {
                            if(scroll.contentItem != contener) scroll.contentItem = contener
                            contener.height = 600
                            contener.width = width
                    }
            }
     
    	onWidthChanged: scrollChange()
    	onHeightChanged: scrollChange()
     
    	ScrollView {
    		id : scroll
    		anchors.fill : parent
    	}
     
    	Item{id :itemNull}
     
    	Rectangle {
    		id: contener
    		width : 600
    		height: 600
    		GridLayout {
    			id: grid
    			columns: 3
    			anchors.fill :contener
    			Rectangle { color : "blue" ; Layout.fillHeight: true ; Layout.fillWidth: true }
    			Rectangle { color : "green"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
    			Rectangle { color : "red"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
    			Rectangle { color : "yellow"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
    			Rectangle { color : "black"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
    			Rectangle { color : "brown"  ; Layout.fillHeight: true ; Layout.fillWidth: true}
    		}
    	}
    }
    En fait je ne suis pas certain d'avoir compris la question.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    Et bien je te rassure... tu as tout à fait compris ma question.
    C'est exactement ce résultat que je cherchais

    Il ne me reste plus qu'à l'adapter à mon appli.

    Merci à toi.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. Centrer un GridLayout dans une JFrame
    Par Gueuz dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 28/11/2011, 09h46
  2. Centrer un gridLayout dans une fenetre plein ecran
    Par jm49 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/03/2009, 14h29
  3. probleme avec GridLayout dans JPanel
    Par kortnor dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 04/08/2007, 19h03
  4. GridLayout dans BorderLayout?
    Par LeXo dans le forum Agents de placement/Fenêtres
    Réponses: 20
    Dernier message: 13/07/2007, 17h30
  5. Creer un gridlayout dans un border layout
    Par rider74 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/10/2006, 13h31

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