drawtext在Qt中不起作用

时间:2015-05-21 13:45:08

标签: c++ qt drawtext

我正在开发一个项目,该项目包括使用qt创建一个uml工具,现在我有一个箭头上的drawingtext问题,所以这是我的代码:

void Arrow::paint(QPainter *painter, const QStyleOptionGraphicsItem * ,QWidget *)
{
    if (myStartItem->collidesWithItem(myEndItem))
        return;

    QPen myPen = pen();
    myPen.setColor(myColor);
    qreal arrowSize = 20;
    painter->setPen(myPen);
    painter->setBrush(myColor);

    QLineF centerLine(myStartItem->pos(), myEndItem->pos());
    QPolygonF endPolygon = myEndItem->polygon();
    QPointF p1 = endPolygon.first() + myEndItem->pos();
    QPointF p2;
    QPointF intersectPoint;
    QLineF polyLine;
    for (int i = 1; i < endPolygon.count(); ++i)
    {
        p2 = endPolygon.at(i) + myEndItem->pos();
        polyLine = QLineF(p1, p2);
        QLineF::IntersectType intersectType =
            polyLine.intersect(centerLine, &intersectPoint);
        if (intersectType == QLineF::BoundedIntersection)
            break;
        p1 = p2;
    }

    setLine(QLineF(intersectPoint, myStartItem->pos()));

    double angle = ::acos(line().dx() / line().length());
    if (line().dy() >= 0)
        angle = (Pi * 2) - angle;

    QPointF arrowP1 = line().p1() + QPointF(sin(angle + Pi / 3) * arrowSize,
                                            cos(angle + Pi / 3) * arrowSize);
    QPointF arrowP2 = line().p1() + QPointF(sin(angle + Pi - Pi / 3) * arrowSize,
                                            cos(angle + Pi - Pi / 3) * arrowSize);

    arrowHead.clear();
    arrowHead << line().p1() << arrowP1 << arrowP2;
    painter->drawLine(line());
    //painter->drawPolygon(arrowHead);
    if (isSelected())
    {
        painter->setPen(QPen(myColor, 1, Qt::DashLine));
        QLineF myLine = line();
        myLine.translate(0, 4.0);
        painter->drawLine(myLine);
        myLine.translate(0,-8.0);
        painter->drawLine(myLine);
        QPoint point = QPoint( 10, 20 );
        painter->drawText( point, "You can draw text from a point..." );
    }
}

没有任何反应我可以画箭头,但文字没有出现在箭头上我该怎么办?我需要一些帮助

1 个答案:

答案 0 :(得分:1)

IMO你做错了。

您应该使用QGraphicsPathItemQGraphicsPolygonItemQGraphicsRectItemQGraphicsSimpleTextItem撰写图形项目,而不是自己绘制所有内容。 只需提供一些负责管理子项的根项(行文本和多边形)。这样做会更容易。

其次你的绘画方法有问题。你应该恢复画家的初始状态!

最后我很确定你的问题是由boundingRect的错误实现引起的。在绘画方法中执行这种复杂绘图时,这是一个很常见的错误。