• 7341阅读
  • 1回复

关于QGraphicsItem的缩放问题,欢迎讨论 [复制链接]

上一主题 下一主题
离线xinqingfly
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-19
在处理组合图元缩放旋转时发现个问题,代码如下
QGraphicsItemGroup *test = scene->createItemGroup(scene->selectedItems());
    test->setFlag(QGraphicsItem::ItemIsMovable, true);
    test->setFlag(QGraphicsItem::ItemIsSelectable, true);
    QRectF m_rect=test->boundingRect();
    qreal wval=1.5;
    qreal hval=1.0;
    QPointF trspt;
    QTransform trans,trans1;
    //先旋转后缩放
  trspt=m_rect.center();
    trans1.translate(trspt.x(),trspt.y() );
    trans1.rotate(90);
    trans1.translate(-trspt.x(),-trspt.y() );
    test->setTransform(trans1,true);

    m_rect=test->boundingRect();
    trspt=m_rect.topLeft();
    trans.translate(trspt.x(),trspt.y() );
    trans.scale( wval, hval);
    trans.translate(-trspt.x(),-trspt.y() );
    test->setTransform(trans,true);

//按照上面的代码程序运行后旋转缩放后图元正常
如果按下面的顺序进行矩阵变换就会出线旋转后图元大小发生变化的情况,本来按程序应该是宽度放大一倍,旋转过来后变反了,请问如何解决这个问题,谢谢
    //先缩放后旋转
  trspt=m_rect.topLeft();
    trans.translate(trspt.x(),trspt.y() );
    trans.scale( wval, hval);
    trans.translate(-trspt.x(),-trspt.y() );
    test->setTransform(trans,true);

    m_rect=test->boundingRect();
    trspt=m_rect.center();
    trans1.translate(trspt.x(),trspt.y() );
    trans1.rotate(90);
    trans1.translate(-trspt.x(),-trspt.y() );
    test->setTransform(trans1,true);

把代码放上来吧,我也是在网上的例子上改的,选中两个图元后点击菜单中的group items,函数为void MainWindow::groupItems()
[ 此帖被xinqingfly在2011-04-19 11:46重新编辑 ]
附件: qdiagram_0v1.rar (70 K) 下载次数:47
菜鸟也是鸟
离线xinqingfly

只看该作者 1楼 发表于: 2011-04-26
up一下
菜鸟也是鸟
快速回复
限100 字节
 
上一个 下一个