Включение свойства «elide» в текстовом элементе QML, но в пользовательских интерфейсах справа налево - PullRequest
1 голос
/ 06 апреля 2020

Я понимаю, что свойство "width" должно быть установлено неявно, чтобы elide работал. Тем не менее, у меня есть текстовый элемент в макете. Я хотел бы обрезать текст, когда он становится слишком длинным. Как использовать elide в текстовом типе, когда включен пользовательский интерфейс справа налево (к сведению, я использую свойство LayoutMirroring.enabled : True)?

Более того, при этом я вижу проблему с выравниванием, когда неявно устанавливаю для свойства width какое-то значение. Проблема в том, что для арабского c языка он работает правильно, но иногда есть тексты на английском языке, которые не переводятся на арабский c и должны вести себя так же, как арабский c (что означает, что они должны совпадать с Справа), но текст Engli sh выравнивается по левому краю.

Если я удаляю свойство width, все работает нормально, но elide не работает ....

Text {
        id: textId

        text: "Toooooooooooooooooooooooooo Looooooooooooooooonggggg"

        anchors.left: rootId.left
        anchors.leftMargin: 148
        anchors.baseline: headerId.baseline
        anchors.baselineOffset: 40

        width: 360
        elide: Text.ElideRight

        LayoutMirroring.enabled: ifArabicSelected ? True : False

        opacity: visible ? 1 : 0

        color: Colors.text_color_light

        Behavior on opacity { NumberAnimation { duration: Durations.anim_menuDuration }}
    }

1 Ответ

2 голосов
/ 06 апреля 2020

Текст elide не работает без явно установленного width. Вы уже знаете об абзаце https://doc.qt.io/qt-5/qml-qtquick-text.html#elide -prop :

. Установите это свойство, чтобы исключить части текста, соответствующие ширине элемента Text. Текст будет удален только в том случае, если задана явная ширина.

Итак, при использовании внутреннего макета, почему вы используете anchors? Это не правильный способ позиционирования Item внутри макета. Вы должны использовать вложенное свойство Layout https://doc.qt.io/qt-5/qml-qtquick-layouts-layout.html#preferredWidth -attached-prop , а также выровнять Item, используя это свойство https://doc.qt.io/qt-5/qml-qtquick-layouts-layout.html#alignment -attached-prop . Кроме того, почему бы не связать свойство width с родительским размером? это все еще может работать. Текст elide будет включен для любого направления, но с явно заданным значением width (или, по крайней мере, Layout.width).

Во-вторых, вы отразили свой макет. Вы также должны изменить направление элиды. Смотрите мой пример:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    id: root
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    Text {
        property bool ifArabicSelected: true
        id: textId
        text: "Toooooooooooooooooooooooooo Looooooooooooooooonggggg"
        anchors.left: root.left
        anchors.right: root.left
        width: parent.width
        height: 32
        anchors.baselineOffset: 40
        elide: Text.ElideLeft
        horizontalAlignment: Text.AlignLeft
        LayoutMirroring.enabled: true
        opacity: visible ? 1 : 0
        color: "black"
    }
}

Это то, чего вы пытаетесь достичь? Вам также необходимо указать условное связывание с elide propty. Этот пример просто показывает elide с другой стороны, которая, я думаю, вам нужна в вашем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...