2014-10-02 6 views
5

Come è possibile impostare in modo condizionale proprietà diverse di un gruppo di proprietà in un colpo solo?QML: imposta diverse proprietà di un gruppo di proprietà in modo condizionale

Esempio: supponiamo che sia disponibile una proprietà di contesto _context.condition. Dato questo valore vorrei impostare diversi ancoraggi per un oggetto 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 
     } 
    } 
} 

Sto utilizzando QtQuick 2.0 in Qt 5.3. Grazie!

+1

assomiglia horizontalCenter: _context.condition? parent.horizontalCenter: 0 e così via –

+0

Ok, non sapevo che il valore 0 corrisponde a "non impostato". Lo controllerò. Ingombrante, ma almeno qualcosa. Grazie! – normanius

+0

in realtà, non sono sicuro di questo, prova solo :) forse, puoi assegnare 'undefined' invece di 0 –

risposta

7

Si può provare questo (non testato):

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

Inoltre, secondo this parentesi graffe vuote può essere utilizzato per ripristinare il valore della proprietà:

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

Ho appena scoperto che usare '{}' invece di '0' è un modo più neutro rispetto al tipo di dire "non definito". Oltre a questo, accetterei la tua soluzione. – normanius

+1

hanno aggiornato con il link ai documenti –

+0

oops, sembra che sia solo per Stato, controllerà di più ... –

Problemi correlati