如何基于属性锚定不同的事物?

时间:2019-03-20 05:09:06

标签: qt qml anchorpoint

我想要一个看起来像这样的QML布局:

+--------+            +--------+
|        |            |        |
| Text 1 |            | Text 3 |
+--------+            +--------+
----^^---------vv---------^^----
           +--------+
           | Text 2 |
           |        |
           +--------+

换句话说,替代对象(在这种情况下为QML项)放置在某个中心线的上方或下方,并且它们所包含的内容(QML文本)在之内,这些对象需要移至对象的顶部或底部。

现在我知道我可以使特定的东西与物品上的锚点对齐

anchors.bottom: isAbove ? parent.bottom : parent.top;

但这会设置项目底部锚点,而不管是否需要(例如,containig Text 2上方的第二个对象)。

我实际上正在寻找的是一种根据位置仅设置<​​em>一个锚的方法。在psuedo-QML中,应该是:

isAbove? (anchors.bottom: parent.bottom) : (anchors.top: parent.top);

换句话说,如果项目底部位于行上方,我只想将其底部锚定到父底部。否则,我想将项目顶部锚定到父顶部。

我认为可能是这样的:

anchors.bottom: isAbove ? parent.bottom : nothing   ;
anchors.top:    isAbove ? nothing       : parent.top;

但是nothing似乎不是锚定选项:-)

是否可以使用QML做到这一点?

2 个答案:

答案 0 :(得分:1)

如果要删除锚点,则必须按照docs的指示使用undefined

答案 1 :(得分:0)

您可以使用States机制并使用AnchorChanges,有关示例请参见https://doc.qt.io/archives/qt-4.8/qml-anchorchanges.html