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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пропадание элемента при добавлении трансформации  (Прочитано 2852 раз)
ctin
Гость
« : Сентябрь 14, 2012, 14:40 »

Доброго времени суток!
Создал элемент: вращающуюся стрелку.
Существующая проблема: стрелка не отображается пока есть последняя строка (transform). Стоит её закомментировать - и всё работает.
Подскажите пожалуйста, в чем может быть проблема?

Код:
Image {
            id: arrow
            smooth: true
            source: "./newImages/Arrow.png"
            width: arrow.sourceSize.width / background.sourceSize.width *background.width
            height: arrow.sourceSize.height / background.sourceSize.height * background.height
            x: 60 / background.sourceSize.width * background.width
            y: 63 / background.sourceSize.height * background.height
            transform: Rotation { origin.x: 25; origin.y: 25; angle: 45}
        }

Записан
mutineer
Гость
« Ответ #1 : Сентябрь 14, 2012, 15:32 »

в консоль ворнинги выбрасывает?
Записан
ctin
Гость
« Ответ #2 : Сентябрь 14, 2012, 15:36 »

Запускается E:\testQtProjects\cupBoard\debug\cupBoard.exe...
Qml debugging is enabled. Only use this in a safe environment!
LEAK: 220 Structure // при закрытии программы
E:\testQtProjects\cupBoard\debug\cupBoard.exe завершился с кодом 0


Весь текст программы:
Код:
import QtQuick 1.0

/*!
   The base canvas for all QML drawing.
*/


Rectangle {
    id: dial   
    property int value: 0
    width: 200
    height: 400
    //color: "transparent"

    Keys.onPressed: {
        if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9) {
                     dial.value = event.key - Qt.Key_0
                     event.accepted = true;
                 }
    }

    Image {
        id: background
        smooth: true
        source: dial.focus ? "./newImages/ArrowBackground_focused.png"
              : mouseArea.containsMouse ? "./newImages/ArrowBackground_hovered.png"
                                        : "./newImages/ArrowBackground.png"
        width: parent.width
        height: parent.height / 2
        Image {
            id: arrow
            smooth: true
            source: "./newImages/Arrow.png"
            width: arrow.sourceSize.width / background.sourceSize.width *background.width
            height: arrow.sourceSize.height / background.sourceSize.height * background.height
            x: 60 / background.sourceSize.width * background.width
            y: 63 / background.sourceSize.height * background.height
            transform: Rotation {
                origin.x: arrow.sourceSize.width / 2
                origin.y: arrow.sourceSize.height / 2
                angle: (dial.value < 10 ? dial.value : 0) * 36.0 + 105; //105 - поправка, так как на фото стрелочка показывает на 7
                Behavior on angle {
                    SpringAnimation {damping: 0.5; spring : 5; modulus: 360 }
                }
            }
            /*transform: Rotation {
                origin.x: arrow.sourceSize.width / 2
                origin.y: arrow.sourceSize.height / 2
                angle: (dial.value < 10 ? dial.value : 0) * 36.0 + 105; //105 - поправка, так как на фото стрелочка показывает на 7
                Behavior on angle {
                    SpringAnimation {damping: 0.5; spring : 5; modulus: 360 }
                }
            }*/
        }

        MouseArea {
            function calculateValue() {
                dial.focus = true
                if(mouseX == background.width / 2)
                    return
                var angle = Math.atan((mouseY - background.height / 2)
                                    / (mouseX - background.width / 2));
                //text.text = string(mouseY)
                angle *= (180 / 3.1415926);
                angle += 90 + (mouseX > background.width / 2) * 180
                var sector = (360.0 / 10);
                if(angle > 342)
                    angle = 0
                dial.value = Math.floor((angle + 18) / sector)
            }

            id: mouseArea
            hoverEnabled: true
            anchors.fill: parent
            onPositionChanged:
                if(mouseArea.pressedButtons == Qt.LeftButton)
                    calculateValue();
            onPressed: calculateValue()

        }
    }
}
Записан
lighting
Гость
« Ответ #3 : Сентябрь 14, 2012, 17:07 »

Косяк где-то в расчетах width и height элемента arrow, если их забить фиксированными значениями то все нормально работает.
Кстати даже без этих исправлений все работает, но для того чтобы arrow отобразилась надо изменить размер окна.
Записан
ctin
Гость
« Ответ #4 : Сентябрь 14, 2012, 17:31 »

спасибо! Действительно, буду внимательнее!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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