void Link::paint(QPainter *painter, const QStyleOptionGraphicsItem *style, QWidget *widget) { if(m_from.isNull() || m_to.isNull()) return; if(m_selected) painter->setPen(QPen(QBrush(Qt::green), 3.0)); else painter->setPen(QPen(QBrush(Qt::darkGreen), 3.0)); QLineF line(m_from->pos() + m_from->boundingRect().center(), m_to->pos() + m_to->boundingRect().center()); painter->drawLine(line); painter->setPen(QPen(QBrush(Qt::blue), 5.0)); QPointF line13 = (line.p1()*2+line.p2())/3; QPointF line23 = (line.p1()+line.p2()*2)/3; auto arrow1 = QLineF::fromPolar(15.0, line.angle() - 135); auto arrow2 = QLineF::fromPolar(15.0, line.angle() + 135); painter->drawLine(arrow1.translated(line13)); painter->drawLine(arrow2.translated(line13)); painter->drawLine(arrow1.translated(line23)); painter->drawLine(arrow2.translated(line23)); auto tbr = labelBoundingRect(); painter->setPen(Qt::lightGray); if(m_selected) painter->setBrush(QBrush(Qt::yellow, Qt::SolidPattern)); else painter->setBrush(QBrush(Qt::lightGray, Qt::SolidPattern)); painter->drawRect(tbr); if(m_rtsLink) painter->setPen(QPen(QBrush(Qt::darkRed), 3.0)); else painter->setPen(QPen(QBrush(Qt::red), 3.0)); painter->drawText(tbr.center() - QPointF(tbr.width()/2, -4), m_label); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RiuQwtSymbol::renderSymbolLabel(QPainter *painter, const QPointF& position) const { QSize symbolSize = QwtSymbol::size(); QRect symbolRect (position.x(), position.y(), symbolSize.width(), symbolSize.height()); QRect labelRect = labelBoundingRect(painter, symbolRect); painter->drawText(labelRect.topLeft(), m_label); }
bool Link::isSelection(QPointF point) { return labelBoundingRect().contains(point); }