如何根据 属性 锚定不同的东西?

How to anchor different things based on a property?

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

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

换句话说,备用对象(在本例中为 QML 项)放置在某些中心线的上方或下方,它们包含的内容(QML 文本) 这些对象中需要转到对象的顶部或底部。

现在我知道我可以将特定的东西与项目上的锚点对齐:

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

但这将设置项目底部锚点,无论是否需要(例如上面包含的第二个对象 Text 2)。

我真正想要的是一种根据位置仅设置 一个 锚点的方法。在伪 QML 中,这将是:

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

换句话说,我只想将项目底部锚定到父底部(如果它在线上方)。否则我想将项目顶部锚定到父顶部。

我认为可能是这样的:

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

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

有没有办法用 QML 做到这一点?

如果要删除锚点,则必须使用 undefined,如 docs

所示

您可以使用 States 机制并使用 AnchorChanges,请参阅 https://doc.qt.io/archives/qt-4.8/qml-anchorchanges.html 以获得一个很好的示例