2015-11-01 39 views
6

我有項的行當窗口寬度獲取對於一行中的顯示的所有項目太小,這應堆作爲顯示在下面的草圖:流佈局與中心的內容

enter image description here

Flow組件堆的項目,但他們不是中心,但排列在左側或右側:

Flow { 
    Item {} 
    Item {} 
    Item {} 
    Item {} 
    Item {} 
} 

是否有QML內置的方式,使中心的流量?

回答

3

那麼沒有內置的方式,但我找到了解決辦法。

這個想法很簡單,因爲Flow已經是Item它有anchors.leftMarginanchors.rightMargin。因此,如果我們可以計算,Flow的行內有多少元素,那麼我們可以計算左右邊距。因此,我們可以在中心。

這是一個簡單的代碼,

 Flow { 
     property int rowCount: parent.width/(elements.itemAt(0).width + spacing) 
     property int rowWidth: rowCount * elements.itemAt(0).width + (rowCount - 1) * spacing 
     property int mar: (parent.width - rowWidth)/2 

     anchors { 
      fill: parent 
      leftMargin: mar 
      rightMargin: mar 
     } 

     spacing: 6 
     Repeater { 
      id: elements 
      model: 5 
      Rectangle { 
       color: "#aa6666" 
       width: 100; height: 100 
      } 
     } 
1

Qml中是否有一種內置方式來使流程居中?

你可以做一下數學計算來檢查,如果最後「行」在Flow是不是滿的,然後添加一些墊片項目在該行中的項目的左側和右側。可能你必須使用一些C++;即QQuickItem::stackBefore()QQuickItem::stackAfter()將墊片項目重新放置在Flow的子項列表中。每個間隔物的寬度將是該行內剩餘空間的一半。這並不漂亮,但它應該工作。

0

我不認爲有任何內置的方式來這樣做。你必須做出自己的元素。