废话不说,淦淦淦!!!请大哥大姐们不吝赐教!
头文件
#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