Russian Qt Forum
Ноябрь 22, 2024, 14:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему-то не вычисляется выражение в QML (с картинками)  (Прочитано 1895 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Декабрь 03, 2018, 19:55 »

Делаю я тип MetallFramePlanarButton.qml для отрисовки кнопки. Делается на базе типа Item. Предполагается, что кнопка квадратная. В нем сделано свойство scaleFactor (используемое для масштабирования внутренних элементов):

Код:
Item {
    id: root
   
    ...

    property double scaleFactor: buttonFrame.implicitWidth===0 ? 0 : root.width/buttonFrame.implicitWidth

    // Размер кнопки задается шириной. Кнопка квадратная
    height: root.width

    onWidthChanged: {
        setButtonFrameSize();
    }

    onHeightChanged: {
        setButtonFrameSize();
    }

    // * Установка размера картинки рамки *
    function setButtonFrameSize() {
        // Напрямую устанавливать значения нельзя
        var w=buttonFrame.implicitWidth*root.scaleFactor;
        var h=buttonFrame.implicitHeight*root.scaleFactor;

        buttonFrame.width=w;
        buttonFrame.height=h;
    }

    ...

    // Металлическая рамка
    // Относительно нее считаются размеры и смещения всех остальных элементов в кнопке
    Image {
        id: buttonFrame

        source: "qrc:/resource/pic/button/metallFramePlanarButton/buttonCase.png"
        fillMode: Image.PreserveAspectFit
    }

}

Используется эта кнопка с указанием ширины:

Код:
MetallFramePlanarButton {
        id: exitToMainMenuButton

        iconSource1: "qrc:/resource/pic/mapTools/buttons/iconMenu.png"

        width: root.buttonSize
    }


Так вот, ставлю я брекпоинт в функцию setButtonFrameSize(), чтобы посмотреть как вычисляются w и h. И вижу, что они равны нулю:

http://i.piccy.info/i9/2094984c903235facac02d77768cd2b3/1543847738/275438/1286422/qml_trouble_function.png

Почему же, например, w равно нулю? Потому что:

Код:
buttonFrame.implicitWidth = 169
root.scaleFactor = 0

Умножение на 0 дает 0. Теперь вопрос, а почему root.scaleFactor нуливой? Дублирую выражение, которым это свойство вычисляется, чтобы оно вычислилось в отладчике (его видно справа вверху, нижняя строчка:

Код:
buttonFrame.implicitWidth===0 ? 0 : root.width/buttonFrame.implicitWidth

И это выражение дает значение 0.53. Это совсем не 0!

http://i.piccy.info/i9/1bf478f285b85c332fa833252893bd8b/1543853567/207581/1286422/scr0055.jpg

То есть, если вычислить выражение в отладчике, оно дает ненулевое значение. То же самое выражение, присвоенное свойству scaleFactor, имеет значение 0.

Почему так?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 23.