#pragma once #include<QGraphicsItem> #include<QGraphicsRectItem> #include<QGraphicsSceneMouseEvent> class GraphicsItem :public QGraphicsRectItem { public: GraphicsItem(QGraphicsItem* parent = nullptr); private: QPointF m_centerPointF; bool m_bResizing; };更改这个类,使创建出来的Item可以拉伸大小和移动位置
时间: 2024-01-24 15:30:22 浏览: 144
#pragma once用法
要使创建的GraphicsItem可以拉伸大小和移动位置,您可以对GraphicsItem类进行以下更改:
```cpp
#pragma once
#include <QGraphicsItem>
#include <QGraphicsRectItem>
#include <QGraphicsSceneMouseEvent>
class GraphicsItem : public QGraphicsRectItem
{
public:
GraphicsItem(QGraphicsItem* parent = nullptr);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
private:
QPointF m_pressPos;
QRectF m_originalRect;
bool m_bResizing;
};
```
在这个更改过的类中,我们添加了三个鼠标事件处理函数:mousePressEvent,mouseMoveEvent和mouseReleaseEvent。这些函数将帮助我们实现拉伸和移动功能。
```cpp
#include "GraphicsItem.h"
GraphicsItem::GraphicsItem(QGraphicsItem* parent)
: QGraphicsRectItem(parent)
{
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
m_bResizing = false;
}
void GraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
m_pressPos = event->pos();
m_originalRect = rect();
if (m_originalRect.contains(m_pressPos))
{
m_bResizing = true;
setCursor(Qt::SizeAllCursor);
}
else
{
m_bResizing = false;
setCursor(Qt::ClosedHandCursor);
}
QGraphicsRectItem::mousePressEvent(event);
}
void GraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
{
if (m_bResizing)
{
QPointF delta = event->pos() - m_pressPos;
QRectF newRect = m_originalRect.adjusted(0, 0, delta.x(), delta.y());
setRect(newRect);
}
else
{
QGraphicsRectItem::mouseMoveEvent(event);
}
}
void GraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
m_bResizing = false;
setCursor(Qt::ArrowCursor);
QGraphicsRectItem::mouseReleaseEvent(event);
}
```
在这些鼠标事件处理函数中,我们根据鼠标操作来更新矩形的大小和位置。如果按下鼠标时位于矩形内部,我们将启用拉伸功能,并将光标设置为SizeAllCursor,表示可以拉伸。如果按下鼠标时位于矩形外部,我们将启用移动功能,并将光标设置为ClosedHandCursor,表示可以移动。在拖动鼠标时,我们根据鼠标的偏移量来调整矩形的大小或位置。
现在,您可以使用更改后的GraphicsItem类来创建可拉伸大小和可移动位置的Item了。
阅读全文