QT ROI系列(1) - 矩形框

本代码主要实现一个带控制点、可拖动的矩形框控件,废话不说,直接干。

有很多可以改善的地方,请多多指教。

.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);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值