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.

82 lines
2.1 KiB
C

#pragma once
#include <QObject>
#include <QGraphicsRectItem>
#include <QGraphicsSceneMouseEvent>
#include <QBrush>
#include <QDebug>
#include <QPen>
#include <QPainter>
#include <cmath>
#include "global.h"
#include "GlobalDefine.h"
class MyDrawRectItem : public QObject, public QGraphicsRectItem
{
Q_OBJECT
public:
enum TransformType {
NONE,
MOVE,
ROTATE,
SCALE
};
public:
MyDrawRectItem(qreal x, qreal y, qreal width, qreal height, QGraphicsItem *parent = nullptr)
: QGraphicsRectItem(x, y, width, height, parent) {
}
~MyDrawRectItem();
int Id() const { return m_id; }
void Id(int val) { m_id = val; }
double RectX() const { return m_rectX; }
void RectX(double val) { m_rectX = val; }
double RectY() const { return m_rectY; }
void RectY(double val) { m_rectY = val; }
double Width() const { return m_width; }
void Width(double val) { m_width = val; }
double Height() const { return m_height; }
void Height(double val) { m_height = val; }
private:
void CountPerVertexCoord(double xCoord, double yCoord, int pointPos); //pointPos:0:<3A><><EFBFBD>£<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CountRectVertexCoord();
public:
void SetDrawRectAttr(double x1, double y1, double width, double height);
void SetActualDieCoordAndUpdate(double x1, double y1, double width, double height, double angle);
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;
signals:
void signal_select(int id);
private:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
double m_rectX;
double m_rectY;
double m_width;
double m_height;
double m_rotateAngle = 0;
double m_leftDownX;
double m_leftDownY;
double m_rightTopX;
double m_rightTopY;
double m_rightDownX;
double m_rightDownY;
QLineF m_levelLine;
int m_id;
bool m_isMoustLeftPress = false;
TransformType m_translteType;
QPointF m_mousePressDownPos; //<2F><><EFBFBD><EFBFBD><EAB0B4>ʱ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
double m_backupWidth = 0.0;
double m_backupHeight = 0.0;
double m_initScale = 1.0;
double m_nowScale = 0;
};