Untitled
unknown
plain_text
a year ago
1.9 kB
1
Indexable
Never
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; };