本代码主要实现一个带控制点、可拖动的矩形框控件,废话不说,直接干。
有很多可以改善的地方,请多多指教。
.h文件
#ifndef RECT1ITEM_H
#define RECT1ITEM_H
#include <QObject>
#include <QGraphicsItemGroup>
#include <QGraphicsSceneMouseEvent>
class Rect1Item : public QObject,public QGraphicsItemGroup
{
Q_OBJECT
Q_INTERFACES(QGraphicsItem)
public:
Rect1Item();
protected:
//鼠标点击事件
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
//鼠标移动事件
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
//鼠标释放事件
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
//控件外包矩形
QRectF boundingRect();
private:
QGraphicsRectItem *mBody; //矩形框
QGraphicsEllipseItem *mLeftTop; //左上控制点
QGraphicsEllipseItem *mRightTop; //右上控制点
QGraphicsEllipseItem *mLeftButton; //左下控制点
QGraphicsEllipseItem *mRightButton; //右下控制点
QGraphicsItem* mSelectItem; //鼠标选择的控件
QPointF mLastPoint; //鼠标最后点击的位置在场景中的位置
QPointF mStartPoint; //鼠标点击时控制点的位置
bool mIsPressed; //是否点击状态
};
#endif // RECT1ITEM_H
.cpp文件
#include "rect1item.h"
#include <QPen>
#include <QDebug>
Rect1Item::Rect1Item()
{
mIsPressed = false;
mSelectItem = nullptr;
mLastPoint = QPointF(0,0);
mStartPoint = QPointF(0,0);
mBody = new QGraphicsRectItem(0,0,60,60);
mLeftTop = new QGraphicsEllipseItem(0,0,10,10);
mRightTop = new QGraphicsEllipseItem(0,0,10,10);
mLeftButton = new QGraphicsEllipseItem(0,0,10,10);