Russian Qt Forum

Qt => Qt Quick => Тема начата: ctin от Сентябрь 14, 2012, 14:40



Название: Пропадание элемента при добавлении трансформации
Отправлено: 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}
        }



Название: Re: Пропадание элемента при добавлении трансформации
Отправлено: mutineer от Сентябрь 14, 2012, 15:32
в консоль ворнинги выбрасывает?


Название: Re: Пропадание элемента при добавлении трансформации
Отправлено: ctin от Сентябрь 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()

        }
    }
}


Название: Re: Пропадание элемента при добавлении трансформации
Отправлено: lighting от Сентябрь 14, 2012, 17:07
Косяк где-то в расчетах width и height элемента arrow, если их забить фиксированными значениями то все нормально работает.
Кстати даже без этих исправлений все работает, но для того чтобы arrow отобразилась надо изменить размер окна.


Название: Re: Пропадание элемента при добавлении трансформации
Отправлено: ctin от Сентябрь 14, 2012, 17:31
спасибо! Действительно, буду внимательнее!