#include "DraggableLine.h" #include #include #include #include RulerLineItem::RulerLineItem(const QLineF& line, QGraphicsItem* parent) : QGraphicsLineItem(line, parent) { initRuler(); createHandles(); } int RulerLineItem::type() const { return Type; } void RulerLineItem::initRuler() { // 初始化标尺样式 setPen(QPen(Qt::red, 2)); createTextItem(); setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges); } void RulerLineItem::createTextItem() { m_textItem = new QGraphicsTextItem(this); m_textItem->setDefaultTextColor(Qt::black); m_textItem->setFont(QFont("Arial", 8)); updateTextPosition(); } void RulerLineItem::createHandles() { // 创建可拖动端点 m_startHandle = new HandleItem(this); m_endHandle = new HandleItem(this); m_startHandle->setPos(line().p1()); m_endHandle->setPos(line().p2()); connect(m_startHandle, &HandleItem::positionChanged, this, &RulerLineItem::updateLineFromHandles); connect(m_endHandle, &HandleItem::positionChanged, this, &RulerLineItem::updateLineFromHandles); } void RulerLineItem::updateHandlePositions() { QLineF l = line(); m_startHandle->setPos(l.p1()); m_endHandle->setPos(l.p2()); updateHandlesSignal(l.p1(), l.p2()); } void RulerLineItem::updateTextPosition() { m_textItem->setPos(line().center()); } void RulerLineItem::setRulerText(const QString& strText) { m_strRulerText = strText; m_textItem->setPlainText(strText); } void RulerLineItem::updateLineFromHandles() { QLineF newLine(m_startHandle->pos(), m_endHandle->pos()); setLine(newLine); updateTextPosition(); // qreal length = line().length(); // QString strText = QString("%1 px").arg(length, 0, 'f', 1); // setRulerText(strText); }