绘图文本在Qt中不起作用

drawtext doesn't work in Qt

本文关键字:不起作用 Qt 文本 绘图      更新时间:2023-10-16

我在一个项目上工作,包括与qt创建uml工具,现在我有一个问题,在箭头上绘制文本,所以这是我的代码:

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..." );
    }
}

什么也没发生我可以画箭头但是箭头上没有文字我该怎么办?我需要一些帮助

我看你做错了。

您应该使用QGraphicsPathItem, QGraphicsPolygonItem, QGraphicsRectItemQGraphicsSimpleTextItem组成您的图形项目,而不是自己绘制所有内容。只是提供一些根项目负责管理的孩子(线文本和多边形)。这样做会更容易。

其次,你的油漆方法有问题。你应该恢复油漆器的初始状态!

最后我很确定你的问题是由boundingRect的不正确实现引起的。在使用paint方法进行如此复杂的绘图时,这是一个很常见的错误。