LINUX.ORG.RU

Проверка границ свойства

 ,


0

1

Изучаю QML.
Есть вопросик.
Вот допустим я хочу что бы у Rectangle было свойство maxWidth, и при изменение width проверялась граница от 0 до maxWidth и понятное дело корректировалось значение width в случае его выхода за границу. Как правильно реализовать это?

★★★★★

Ответ на: комментарий от Deleted

Не, мне нужно событие фильтр. Такое точно должно быть.

deterok ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Я уж даже не знаю как загуглить то. Пробовал «qml property boundaries».

deterok ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Нашел где-то на просторах сети вот такой код:

import QtQuick 2.0

Rectangle {
    id: containing_rect
    property string text

    text: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat"
    //text: "a short string"

    Text {
        id: text_field
        anchors.top: parent.top
        anchors.left: parent.left

        height: parent.height
        width: parent.width
        text: parent.text
        wrapMode: Text.WordWrap

    }

    Text {
        id: dummy_text
        text: parent.text
        visible: false
    }

    states: [
            State {
                name: "wide text"
                when: containing_rect.text.length > 20
                PropertyChanges {
                    target: containing_rect
                    width: 200
                    height: text_field.paintedHeight
                }
            },
            State {
                name: "not wide text"
                when: containing_rect.text.length <= 20
                PropertyChanges {
                    target: containing_rect
                    width: dummy_text.paintedWidth
                    height: text_field.paintedHeight
                }
            }
        ]
}

Работает.

deterok ★★★★★
() автор топика
Последнее исправление: deterok (всего исправлений: 1)

а что мешает самому проверять в onWidthChanged и менять размер? конечно будет вызываться функция уже после изменения размера, т.е. после выхода за границу, но потом «отпрыгивать» назад

Blastbit
()
Ответ на: комментарий от Blastbit

А можно пример, а то что-то я туплю.
Заменил вот на это, но я так понимаю, что он в рекурсию уйдет или как?

Text {
        id: dummy_text
        text: parent.text
        visible: false

        onWidthChanged: {
            if (width > 200){
                parent.width = 200
            }else{
                parent.width = width
            }
        }
    }

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

в рекурсию не уйдет, но вызовет 2 раза обработчик, во второй раз, возможно в таком варианте как у тебя и будет рекурсия, если приязать размер Text к контейнеру. Но вообще это не очень то вариант. Со стейтами получше будет. Про костыли я имел ввиду - использование двух Text и прочее такое. Сама часть state нормальная.

Blastbit
()
Ответ на: комментарий от Blastbit

Вот еще искал тултипы, но нашел что-то хитрожопое только: http://qt-project.org/wiki/QtQuick_ToolTip_Component

По сути они реализованы только у объектов в контроах.

А что это за Qt Quick Components я встречаю в упоминаниях?

deterok ★★★★★
() автор топика

Никак, если не мутить с двумя свойствами. Насчет width же вообще херней не страдай - в qml Layouts есть minimumWidth и maximumwidth.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.