QT ROI系列(2) - 矩形框(可旋转)

废话不说,淦淦淦!!!请大哥大姐们不吝赐教!

头文件

#ifndef RECT2ITEM_H
#define RECT2ITEM_H

#include <QGraphicsItem>
#include <QObject>
#include <QGraphicsSceneMouseEvent>
#include <QPainter>

class Rect2Item : public QObject,public QGraphicsItem
{
    Q_OBJECT
    Q_INTERFACES(QGraphicsItem)
public:
    Rect2Item();

protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
    void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
    void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
    QRectF boundingRect() const override;

private:
    void setRotate(QPointF endPoint);
    void updateControlPoints();
    void updateClosestPoint(QPointF pt);

    double mLength1;
    double mLength2;
    double mCenterY;
    double mCenterX;
    int mRotateAngle;

    bool mIsPressed;
    QPointF mPressedPoint;
    int mSelectedPoint;
    QPointF mLeftTop,mRightTop,mLeftBottom,mRightBottom,mArrow,mArrowEdge1,mArrowEdge2;
    qreal mRadius;

    QPointF midPoint1,midPoint2;
};

#endif // RECT2ITEM_H

源文件

#include "rect2item.h"
#include <QPolygonF>
#include <QGraphicsScene>
#include <QtMath>
#include <QDebug>

Rect2Item::Rect2Item()
{
    mRadius = 5;
    mIsPressed = false;
    mSelectedPoint = -1;

    mLength1 = 80;
    mLength2 = 40;
    mCenterY = 0;
    mCenterX = 0;
    mRotateAngle = 0;

    updateControlPoints();
}

void Rect2Item::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    QPointF loc = event->pos();
    mPressedPoint = loc;
    if(event->button() == Qt::LeftButton)
        mIsPressed = true;

    updateClosestPoint(loc);
}

void Rect2I
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值