You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
C++
69 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <QObject>
|
|
#include <QGraphicsItem>
|
|
#include <QGraphicsEllipseItem>
|
|
#include <QRectF>
|
|
#include <QGraphicsSceneMouseEvent>
|
|
#include <QBrush>
|
|
#include <QDebug>
|
|
#include <QPen>
|
|
#include <QPainter>
|
|
#include <cmath>
|
|
#include "global.h"
|
|
#include "GlobalDefine.h"
|
|
class MyQGraphicsEllipseItem : public QObject, public QGraphicsEllipseItem
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum TransformType {
|
|
NONE,
|
|
MOVE,
|
|
SCALE
|
|
};
|
|
int Id() const { return m_id; }
|
|
void Id(int val) { m_id = val; }
|
|
double CircleX() const { return m_circleX; }
|
|
void CircleX(double val) { m_circleX = val; }
|
|
double CircleY() const { return m_circleY; }
|
|
void CircleY(double val) { m_circleY = val; }
|
|
double Diameter() const { return m_diameter; }
|
|
void Diameter(double val) { m_diameter = val; }
|
|
public:
|
|
MyQGraphicsEllipseItem(qreal x, qreal y, qreal width, qreal height, QGraphicsItem *parent = nullptr)
|
|
: QGraphicsEllipseItem(parent) {
|
|
|
|
// 设置椭圆的位置和大小
|
|
QRectF rect(x, y, width, height);
|
|
setRect(rect);
|
|
}
|
|
~MyQGraphicsEllipseItem();
|
|
|
|
signals:
|
|
void signal_select(int id);
|
|
|
|
public:
|
|
void SetCircleAttr(double x1, double y1, double width, double height);
|
|
void SetCircleInterfaceAttr(double x1, double y1, double dia);
|
|
protected:
|
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
|
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
|
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
|
|
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
|
|
|
|
private:
|
|
int m_id;
|
|
|
|
double m_circleX;
|
|
double m_circleY;
|
|
double m_diameter;
|
|
double m_backupDiameter;
|
|
|
|
TransformType m_translteType;
|
|
|
|
QPointF m_mousePressDownPos; //鼠标按下时在场景中的位置
|
|
|
|
double m_initScale = 1.0;
|
|
double m_nowScale = 0;
|
|
};
|