2017-06-25 1 views
0

Dans mon application QML dans Qt 5.9, je voudrais montrer Rectangle s avec une largeur fixe dans un Flow. Afin de garder la mise en page centrée, j'essaie d'ajuster son rembourrage de façon dynamique. Pour calculer la bonne valeur bien que j'ai besoin de connaître le nombre actuel de colonnes, disons colCount. Y a-t-il un moyen de l'obtenir?Nombre de colonnes dans un flux dans QML

est un exemple de code de ce que je voudrais ici faire en utilisant la variable pseudo colcount:

import QtQuick 2.7 
import QtQuick.Controls 2.2 
import QtQuick.Layouts 1.3 

ApplicationWindow { 
    visible: true 
    width: 800 
    height: 600 
    title: qsTr("Example") 

    Flow { 
     anchors.fill: parent 
     leftPadding: parent.width > 200*colCount ? 0.5*(parent.width - 200*colCount) : 0 
     spacing: 0 

     Rectangle { 
      width: 200 
      height: 200 
      color: "red" 
     } 

     Rectangle { 
      width: 200 
      height: 200 
      color: "blue" 
     } 
    } 
} 

Répondre

0

La magie de l'affichage :) Peu de temps après que j'ai réussi à comprendre cela et je poste la solution ici pour quelqu'un qui pourrait en avoir besoin.

Il existe une propriété childrenRect.width héritée de article qui pourrait être utile. Ainsi, le nombre de colonnes colcount pourrait être calculé comme childrenRect.width/w, où w est la largeur d'un enfant (il devrait être le même pour tous les enfants du FLOW pour celui-ci au travail).

Dans l'exemple de code de la question:

import QtQuick 2.7 
import QtQuick.Controls 2.2 
import QtQuick.Layouts 1.3 

ApplicationWindow { 
    visible: true 
    width: 800 
    height: 600 
    title: qsTr("Example") 

    Flow { 
     anchors.fill: parent 
     leftPadding: parent.width > childrenRect.width ? 0.5*(parent.width - childrenRect.width) : 0 
     spacing: 0 

     Rectangle { 
      width: 200 
      height: 200 
      color: "red" 
     } 

     Rectangle { 
      width: 200 
      height: 200 
      color: "blue" 
     } 
    } 
}