2014-10-02 9 views
5

Jak można warunkowo ustawić różne właściwości grupy właściwości za jednym razem?QML: warunkowo ustawić różne właściwości grupy właściwości

Przykład: Załóżmy, że dostępna jest właściwość kontekstu _context.condition. Biorąc pod uwagę tę wartość, chciałbym ustawić różne zakotwiczenia dla elementu qml.

// Some item... 
Rectangle { 
    id: square 
    width: 50 
    height: 50 

    // For simple properties this should work: 
    color: { if (_context.condition) "blue"; else "red" } 

    // But how to do it for complex properties like 'anchors'? 
    // Note that I set different properties for different values of the condition. 
    // Here is how I would do it, but this does not work: 
    anchors: { 
     if (_context.condition) { 
      // Anchors set 1: 
      horizontalCenter: parent.horizontalCenter 
      bottom: parent.bottom 
      bottomMargin: 20 
     } else { 
      // Anchors set 2: 
      verticalCenter: parent.verticalCenter 
      right: parent.right 
      rightMargin: 20 
     } 
    } 
} 

Używam QtQuick 2.0 w Qt 5.3. Dzięki!

+1

wygląda horizontalCenter: _context.condition? parent.horizontalCenter: 0 i tak dalej –

+0

Ok, nie wiedziałem, że wartość 0 odpowiada "nie ustawiona". Sprawdzę to. Cumbersome, ale przynajmniej coś. Dzięki! – normanius

+0

w rzeczywistości, nie jestem tego pewien, po prostu spróbuj :) może, możesz przypisać 'undefined' zamiast 0 –

Odpowiedz

7

Można spróbować to (nie testowane):

anchors { 
     horizontalCenter: _context.condition ? parent.horizontalCenter : undefined; 
     bottom: _context.condition ? parent.bottom : undefined; 
     bottomMargin: _context.condition ? 20 : undefined; 
     verticalCenter: _context.condition ? undefined : parent.verticalCenter;  
     right: _context.condition ? undefined : parent.right; 
     rightMargin: _context.condition ? undefined : 20; 
     } 

Resetting properties values

Ponadto, zgodnie this pustych nawiasów klamrowych może być używany do resetowania wartości nieruchomości:

Item { 
    property var first: {} // nothing = undefined 
    property var second: {{}} // empty expression block = undefined 
    property var third: ({}) // empty object 
} 
+0

Właśnie się dowiedziałem, że użycie '{}' zamiast "0" jest bardziej neutralnym typowo sposobem na wyrażenie "niezdefiniowane". Poza tym, zaakceptowałbym twoje rozwiązanie. – normanius

+1

zaktualizowano o link do dokumentów –

+0

oops, wygląda na to, że jest tylko dla państwa, sprawdzi więcej ... –