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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите понять почему неправильно высчитываются координаты  (Прочитано 2304 раз)
deterok
Гость
« : Апрель 15, 2015, 19:30 »

В общем есть кодик небольшой чисто на QML:
Я хотел отрисовать некоторый QQuickPaintedItem как скалируемый и перемещаемый объект.
Но при скалирование относительно курсора происходят непонятные сбои в координатах и точка к которой я стремился изменяется. Так же почему-то меняются размеры предка...

Прошу помощи!

Код:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2

ApplicationWindow {
    title: qsTr("Hello World")
    width: 640
    height: 480
    visible: true

    menuBar: MenuBar {
        Menu {
            title: qsTr("&File")
            MenuItem {
                text: qsTr("&Open")
                onTriggered: messageDialog.show(qsTr("Open action triggered"));
            }
            MenuItem {
                text: qsTr("E&xit")
                onTriggered: Qt.quit();
            }
        }
    }

    Rectangle {
        anchors.fill: parent
        color: '#454545'

        Component.onCompleted: {
            console.log(width/2.0, height/2.0)
        }

        Rectangle {
            id:scheme
            color: 'green'
//            model: fl.model
            width: 500
            height: 500



            onXChanged: {
                var bound = parent.width/2

                if (x > bound)
                    x = bound

                if (x + width < bound)
                    x = bound - width


                console.log('parent.width/2:', parent.width/2)
                console.log(x, y)
            }

            onYChanged: {
                var bound = parent.height/2

                if (y > parent.height/2)
                    y = parent.height/2

                if (y + height < bound)
                    y = bound - height

                console.log('parent.height/2:', parent.height/2)
                console.log(x, y)
            }

                onScaleChanged: {

                }

            function scaleToPoint(value, originX, originY){
                schemeScale.origin = Qt.vector3d(originX, originY, 0)
                schemeScale.xScale += value
                schemeScale.yScale += value
            }

            transform: [Scale{
                    id: schemeScale
                    Behavior on xScale {
                        NumberAnimation{duration: 300}
                    }

                    Behavior on yScale {
                        NumberAnimation{duration: 300}
                    }

                    Behavior on origin {
                        Vector3dAnimation{duration: 300}
                    }
                }]

        }
    }

    MouseArea {
        anchors.fill: parent
        drag.target: scheme
        drag.axis: Drag.XAndYAxis

        onWheel: {
            var origin = mapToItem(scheme, wheel.x, wheel.y)
            scheme.scaleToPoint(wheel.angleDelta.y/1200, origin.x, origin.y)
            console.log('Wheel:', wheel.angleDelta.y/1200, '; Origin:', origin.x, origin.y)
        }
    }

    MessageDialog {
        id: messageDialog
        title: qsTr("May I have your attention, please?")

        function show(caption) {
            messageDialog.text = caption;
            messageDialog.open();
        }
    }
}

Antauxdankon!
Записан
deterok
Гость
« Ответ #1 : Апрель 16, 2015, 18:05 »

И тишина... Непонимающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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