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

需求

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

解决方法

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

关于transform

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

代码

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学习_场景缩放时图元保持大小并可拖动_第2张图片

你可能感兴趣的:(QT学习,seer工作,qt,学习,开发语言)