2014-10-02 150 views
5

如何一次性有條件地設置屬性組的不同屬性?QML:有條件地設置屬性組的不同屬性

示例:假設有一個上下文屬性_context.condition可用。鑑於這個價值,我想爲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 
     } 
    } 
} 

我在Qt 5.3中使用QtQuick 2.0。謝謝!

+1

樣子horizo​​ntalCenter:_context.condition? parent.horizo​​ntalCenter:0等等 – 2014-10-02 16:06:46

+0

好的,我不知道值0對應於「未設置」。我會檢查一下。麻煩,但至少有一些東西。謝謝! – normanius 2014-10-02 16:10:05

+0

實際上,我不確定這個,只是嘗試:)也許,你可以分配'undefined'而不是0 – 2014-10-02 16:15:05

回答

7

你可以試試這個(未測試):

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

此外,根據this空的大括號可以用來重置屬性的值:

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

我剛剛發現使用'{}'而不是'0'是一種更爲類型中立的方式來說「未定義」。除此之外,我會接受你的解決方案。 – normanius 2014-10-02 16:32:29

+1

已通過文檔鏈接更新 – 2014-10-02 16:35:42

+0

哎呀,它看起來只是狀態,將檢查更多... – 2014-10-02 16:37:17