123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include "DraggableLine.h"
- #include <QGraphicsSceneMouseEvent>
- #include <QPainter>
- #include <QDebug>
- #include <QGraphicsScene>
- 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);
- }
|