首页| 论坛| 消息

标题:qt 2d 绘图的问题
作者:firebolt
日期:2015-06-07 18:02
内容:

这几天一直在学习qt QGraphicsView 、QGraphicsScene 、QGraphicsItem框架,打算用它做一个绘画工具,需要具备图形的基本编辑功能,比如:创建、移动、旋转、改变大小等操作。前几天做的测试程序实现了给图形添加控制点、通过鼠标改变图形大小、点选或框选图形等操作,后来又加入了旋转与组合的操作。现在遇到如下问题需要请教大家:
1、QGraphicsItem的本地坐标问题:
当本地坐标的原点设置为本地图形矩形的左上角,或非中心位置的时候,在做完旋转操作后,如果调整图形大小,本地图形的原点无法设置到正确的位置。

2、通过一个代理类作为QGraphicsItemGroup对象的parent,可以为这个group对象添加和其他对象一样的鼠标操作,但是,这个对象的pos()却始终不对。结果就是做移动的时候,拖动的位置很奇怪。
3、还有就是通过Qt自带的 QSvgGenerator 无法输出椭圆对象,矩形和直线都没问题。
如图1:绿色圆点为组合对象的transfromOriginPoint,蓝色圆点为组合对象的pos。


图2:拖动组合对象时,pos在组合对象boundingRect之外。


另外附上源码:



请有经验的朋友帮忙指导一下,谢谢。


#1 [firebolt 06-07 19:29]
问题解决了,原点的问题解决了。
QPointF delta = pos() - bound.center() ;
// 将本地坐标原点移动到中心,
setTransform(transform().translate(delta.x(),delta.y()));
//设置原点
setTransformOriginPoint( bound.center());
//还原图形的位置.
moveBy(-delta.x(),-delta.y());
m_group->setTransformOriginPoint(bound.center());

group的问题解决了,希望其他问题也能解决掉。
#2 [firebolt 06-12 09:55]
旋转后改变大小的问题也解决了,QGraphicsItem本身没有改变大小的问题,它可以通过缩放来解决,如果要通过鼠标改变大小就必须自己维护它的本地坐标系,所以改变大小后重建一下本地坐标就可以了。代表挺简单,就不贴了。
#3 [stlcours 06-12 16:24]
东西挺不错,可惜就是不能移动对象~~
#4 回 stlcours 的帖子 [firebolt 06-12 23:18]
stlcours:东西挺不错,可惜就是不能移动对象~~ (2015-06-12 16:24) 
移动对象是没有问题的,主要是改变对象的size后需要重建本地坐标,这个我已经解决了。
#5 回 firebolt 的帖子 [stlcours 06-15 00:25]
firebolt:移动对象是没有问题的,主要是改变对象的size后需要重建本地坐标,这个我已经解决了。 (2015-06-12 23:18) 
一语点醒啊。如果是开源项目,不妨继续把源码发上来给大伙瞧瞧,多谢了!

<< 1 2 >> (1/2)

回复 发表
主题 版块