Как закрепить разные вещи на основе свойства? - PullRequest
1 голос
/ 20 марта 2019

Мне нужна раскладка 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?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Если вы хотите удалить якорь, вы должны использовать undefined, как указано в документах

0 голосов
/ 20 марта 2019

Вы можете использовать механизм States и использовать AnchorChanges, см. https://doc.qt.io/archives/qt-4.8/qml-anchorchanges.html для хорошего примера

...