
graphicsrectitem.h
#ifndef GRAPHICSRECTITEM_H
#define GRAPHICSRECTITEM_H
#include <QGraphicsItem>
#include "sizehandlerect.h"
class GraphicsRectItem : public QGraphicsItem
{
public:
GraphicsRectItem(const QRect & rect ,QGraphicsItem * parent);
QRectF boundingRect() const;
virtual void resizeTo(SizeHandleRect::Direction dir, const QPointF & point );
void move(const QPointF & point);
virtual Qt::CursorShape getCursor(SizeHandleRect::Direction dir );
SizeHandleRect::Direction hitTest( const QPointF & point ) const;
virtual QRectF rect() const;
virtual void updateGeometry();
QRectF m_rect;
private:
typedef QVector<SizeHandleRect*> Handles;
Handles m_handles;
int selection_handle_size = 4;
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void setState(SelectionHandleState st);
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
};
#endif // GRAPHICSRECTITEM_H
graphicsscene.h
#ifndef GRAPHICSRECTITEM_H
#define GRAPHICSRECTITEM_H
#include <QGraphicsItem>
#include "sizehandlerect.h"
class GraphicsRectItem : public QGraphicsItem
{
public:
GraphicsRectItem(const QRect & rect ,QGraphicsItem * parent);
QRectF boundingRect() const;
virtual void resizeTo(SizeHandleRect::Direction dir, const QPointF & point );
void move(const QPointF & point);
virtual Qt::CursorShape getCursor(SizeHandleRect::Direction dir );
SizeHandleRect::Direction hitTest( const QPointF & point ) const;
virtual QRectF rect() const;
virtual void updateGeometry();
QRectF m_rect;
private:
typedef QVector<SizeHandleRect*> Handles;
Handles m_handles;
int selection_handle_size = 4;
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void setState(SelectionHandleState st);
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
};
#endif // GRAPHICSRECTITEM_H
graphicsview.h
#ifndef GRAPHICSVIEW_H
#define GRAPHICSVIEW_H
#include <QGraphicsView>
#include <QKeyEvent>
#include <QWheelEvent>
class GraphicsView : public QGraphicsView
{
Q_OBJECT
public:
GraphicsView(QWidget *parent = 0);
protected:
void keyPressEvent(QKeyEvent *event);
void wheelEvent(QWheelEvent *event);
};
#endif // GRAPHICSVIEW_H
sizehandlerec.h
#ifndef SIZEHANDLERECT_H
#define SIZEHANDLERECT_H
#include <QGraphicsRectItem>
enum SelectionHandleState { SelectionHandleOff, SelectionHandleInactive, SelectionHandleActive };
class SizeHandleRect : public QGraphicsRectItem
{
public:
enum Direction { LeftTop , Top, RightTop, Right, RightBottom, Bottom, LeftBottom, Left , Center, None};
SizeHandleRect(QGraphicsItem* parent , QRectF rect, Direction dir);
Direction dir() const;
bool hitTest( const QPointF & point );
void move(qreal x, qreal y );
void setState(SelectionHandleState st);
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
const Direction m_dir;
Selecti

该博文详细介绍了如何使用Qt库实现图形界面元素的交互,包括矩形元素的拖动、缩放和旋转功能。通过GraphicsRectItem、GraphicsScene、GraphicsView和SizeHandleRect等类的定义和实现,展示了鼠标事件处理、画布更新和图形变换等功能。同时,给出了一个主窗口的示例,用于创建和操作矩形,并提供了背景图片设置的接口。
最低0.47元/天 解锁文章
4700

被折叠的 条评论
为什么被折叠?



