TransformOrigin



  • Объясните пожалуйста, как работает функция setTransformOriginPoint.
    Я добавляю на сцену квадрат размером 10*10, и хочу установить точку(setTransformOriginPoint) в (5,5)...
    При повороте квадрата на 35 градусов, поворачивает по дефолту (0,0), а не (5,5)



  • Насколько я понял она переносит начало координат объекта в заданую точку. Если перенести в точку 5,5 то поворачивать будет относительно этой точки. Вот простой "пример":http://dl.dropbox.com/u/9133112/Qt/qt_rotate_example.zip у меня так и работает.



  • есть у меня кое какое подозрения, по setTransformOriginPoint
    сначала проверю, потом отвечу



  • Я теперь понял как он работает... вся причина из-за плохого перевода в документации...
    Таким образом если мы установим точку
    @rect->setTransformOriginPoint(50,50);@
    то это будет говорить нам о том, что элемент rect будет изменятся относительно точки 50,50 на сцене.
    Я сначала думал что 50,50 это точка именно на элементе, но ошибся это точка на сцене.
    Перепутал из-за QML. Так как там немного иначе задается точка трансформации:
    @transformOrigin : Item.TopLeft@ что говорит о том что на Item будет вращаться к примеру вокруг точки 0,0



  • Странно, у меня работает именно так как написано. Тоесть setTransformOriginPoint() устанавливает точку относительно которой идут преобразования элемента. Её координаты задаются в координатной системе элемента. У меня Qt 4.8.1 может у нас версии разные ?



  • Точку оставьте на 25,25, а scene->addRect поменяйте координаты на 50,50 к примеру
    потом увидите...
    Просто вы также не заметили)))
    меняйте только позицию элемента...



  • Дык scene->addRect всегда создаёт элемент в точке (0,0). Для изменения позиции элемента использую setPos.



  • Пардон.. не знал об этом :(

    Получается тогда, если мы добавляем элемент addRect(25,25,100,100), то добавится прямоугольник высотой и шириной 100 в позицию 0,0 . А само рисование его будет происходить с точек 25,25



  • Насколько я понял документацию то да. Это можно представить как 2 листа кальки наложеные друг на друга. На одном координатная система сцены на другом - элемента. Формально то ведь вы можете в элементе рисовать любые фигуры в любых кооржинатах, а что бы переместить элемент относительно сцены мы передвигаем один лист относительно другого (или поворачиваем). setTransformOriginPoint задаёт точку отнсительно которой происходят преобразования координатной системы элемента. Вот как то так я это себе представляю :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.