QT学习_场景缩放时图元保持大小并可拖动

Posted Leslie X徐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习_场景缩放时图元保持大小并可拖动相关的知识,希望对你有一定的参考价值。

需求

图元的操作点需要在场景变化时保持大小
详细:图元的子部件(如拖拽点,旋转点)不随视口缩放而缩放,且不影响操作(比如点不到操作点)。

解决方法

  1. 使用flag:QGraphicsItem::ItemIgnoresTransformations。缺点:只是视觉上保持大小,无法支持正常点选拖拽、旋转操作。
  2. 使用transform:需要转换矩阵的知识,但可以完成需求。

关于transform

代码

void Model3DAngleControlItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

    //原来的三角形
    QPainterPath BasePath;
    BasePath.addPolygon(QPolygonF()<<QPointF(11,0)<<QPointF(0,11)<<QPointF(0,-11)<<QPointF(11,0));
    painter->setPen(Qt::NoPen);
    painter->setBrush(QColor(255, 0, 0,180));

    //设置反向缩放变化
    
        auto trans = this->scene()->views().first()->transform();   //获取transform
//        double HscaleFactor = 1.0 / trans.m11();                    //获取水平缩放 倒数
//        double VscaleFactor = 1.0 / trans.m22();                    //获取垂直缩放 倒数
        //设置转换矩阵
        
        trans.setMatrix(1.0 / trans.m11(),trans.m12(),trans.m13(),
                        trans.m21(),1.0 /trans.m22(),trans.m23(),
                        trans.m31(),trans.m32(),trans.m33());
       
        QPainterPath polyPath;
        polyPath = trans.map(BasePath);							//使用QTransform::map函数转换
        this->setPath(polyPath);                                //设置缩放后的图形为可操作区域
        
        painter->drawPath(polyPath);
    
        

以上是关于QT学习_场景缩放时图元保持大小并可拖动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QT 中的 QgraphicsView 中保持图像原始

QT学习_QT图形视图

QT_无边框窗口拖动缩放

用户可调整大小的小部件,如 3D 建模程序

如何实现拖动修改网页中div模块大小

qt里面怎么设置窗口大小改变不触发update