Untitled
unknown
plain_text
2 years ago
1.9 kB
10
Indexable
class TimelineScene::ResizeDecoration::ResizeHandleItem : public QGraphicsPathItem
{
public:
ResizeHandleItem(QGraphicsItem * parent = nullptr)
: QGraphicsPathItem(parent)
, m_physical(new QGraphicsRectItem(this))
{
QPen transparentPen;
transparentPen.setColor(Qt::transparent);
transparentPen.setWidth(physicalWidth);
transparentPen.setBrush(Qt::transparent);
m_physical->setPen(transparentPen);
m_physical->setAcceptHoverEvents(true);
m_physical->setFlag(ItemIsSelectable, false);
m_physical->setFlag(ItemIgnoresTransformations);
setFlag(ItemIgnoresTransformations);
m_physical->setCursor(Qt::SizeHorCursor);
}
void setPath(QPainterPath const & path)
{
if (this->path() == path)
return;
QGraphicsPathItem::setPath(path);
}
//установка clipping прямоугольника в рамках которого отрисовываются видимые уши ресайза
void setClipRect(QRectF const & rect)
{
if (m_clippingRect == rect)
return;
prepareGeometryChange();
m_clippingRect = rect;
}
//установка размера невидимой кликабельной области
void setClickRect(QRectF const & rect)
{
m_physical->setRect(rect);
}
void paint(QPainter * painter, QStyleOptionGraphicsItem const * option, QWidget * widget = nullptr) override
{
painter->setRenderHint(QPainter::Antialiasing);
if (!m_clippingRect.isNull())
painter->setClipRect(m_clippingRect);
QGraphicsPathItem::paint(painter, option, widget);
}
QGraphicsRectItem * physical() const { return m_physical; }
qreal penWidth() const { return physicalWidth; }
private:
int physicalWidth = 4;
//невидимый прямоугольник отвечающий за кликабельную область
QGraphicsRectItem * m_physical = nullptr;
QRectF m_clippingRect;
};
Editor is loading...