LINUX.ORG.RU

ну меняй ему x,y попутно

или (емнип) anchors.centerIn: (или что-то в этом роде)

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

Он на плюсах, сейчас скалируется вот так:

Rectangle {
        anchors.fill: parent
        color: '#454545'
        SchemeView {
            id:scheme
            model: fl.model
            
            Behavior on scale {
                NumberAnimation{duration: 300}
            }

        }
        Component.onCompleted: scheme.sizeUpdate()
    }

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

        onWheel: {
            scheme.transformOriginPoint = Qt.point(mouseX, mouseY)
            scheme.scale += wheel.angleDelta.y/120/10
            console.log(scheme.transformOriginPoint)
        }
    }

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

Кстати, вот что странно. Я теперь вывод ограничил по ViewPort и оно как бы из-за этого не тормозит. Но если я растягиваю окно очень сильно, то притормаживать начинает...

Однако, если я скалирую - то все ок.

Почему так? Двойная буферизация?

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

Я кстати разделяю логику и отображение с помощью qml. Т.е. вся логика приложения на ++, а qml чисто для красатулек.

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

Я сделал вот так сейчас:

SchemeView {
            id:scheme
            model: fl.model

            function scaleToPoint(value, mouseX, mouseY){
                var origin = mapToItem(scheme, mouseX, mouseY)
                console.log(origin)

                schemeScale.origin = Qt.vector3d(origin.x, origin.y, 0)
                schemeScale.xScale += value
                schemeScale.yScale += value
            }

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

                    Behavior on yScale {
                        NumberAnimation{duration: 300}
                    }
                }]

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

Можешь помочь разобраться с вот этим модулем, не пойму почему прыгает изображение при относительным скалированием + странное поведение границ за которые нельзя уходить изображения. Они меняются и у parent'а. Походу проблемы связанные. Не поленись, протесть пожалуйста :)

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();
        }
    }
}
deterok ★★★★★
() автор топика

CrossFire Может ты чего по последнему сообщению подскажешь?

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

Я хочу чтоб ты скалировал меня... Скалируй меня полностью! Тьфу, что за термин, простите не удержался...

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