123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #ifndef RULERLINEITEM_H
- #define RULERLINEITEM_H
- #include <QGraphicsLineItem >
- #include <QObject>
- #include <QPainter>
- class HandleItem : public QObject, public QGraphicsEllipseItem
- {
- Q_OBJECT
- public:
- enum { Type = UserType + 2 };
- HandleItem(QGraphicsItem* parent = nullptr)
- : QGraphicsEllipseItem(-6, -6, 12, 12, parent) {
- setFlag(QGraphicsItem::ItemIsSelectable);
- setFlag(QGraphicsItem::ItemIsMovable);
- setFlag(QGraphicsItem::ItemSendsGeometryChanges);
- setBrush(Qt::cyan);
- setPen(Qt::NoPen);
- }
- int type() const override { return Type; }
- protected:
- QVariant itemChange(GraphicsItemChange change, const QVariant& value) override {
- if (change == ItemPositionHasChanged) {
- emit positionChanged();
- }
- return QGraphicsEllipseItem::itemChange(change, value);
- }
- signals:
- void positionChanged();
- };
- class RulerLineItem : public QObject, public QGraphicsLineItem
- {
- Q_OBJECT
- public:
- enum HandleType
- {
- NoHandle,
- StartHandle,
- EndHandle
- };
- enum { Type = UserType + 1 };
- explicit RulerLineItem(const QLineF& line, QGraphicsItem* parent = nullptr);
- int type() const override;
- void setRulerText(const QString& strText);
- signals:
- //标尺端点更新,发送信号
- void updateHandlesSignal(QPointF sPos, QPointF ePos);
- private slots:
- void updateLineFromHandles();
- private:
- void initRuler();
- void createTextItem();
- void createHandles();
- void updateHandlePositions();
- void updateTextPosition();
- // 成员变量
- HandleType m_draggingHandle = NoHandle;
- QPointF m_dragOffset;
- QGraphicsTextItem* m_textItem = nullptr;
- HandleItem* m_startHandle = nullptr;
- HandleItem* m_endHandle = nullptr;
- QString m_strRulerText;
- };
- #endif // RULERLINEITEM_H
|