drawtext не работает в Qt

я работаю над проектом, который состоит в создании инструмента uml с qt, и на данный момент у меня проблема с рисованием текста на стрелке, так что это мой код:

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

и ничего не происходит, я могу нарисовать стрелку, но текст не появляется на стрелке, что мне делать? пожалуйста, мне нужна помощь


person Qossai Labyad    schedule 21.05.2015    source источник
comment
Чек isSelected() выглядит подозрительно. Совет 1: сделайте отступ в коде. Совет 2: сделайте отступ в коде. Совет 3: действительно может помочь использование отступов.   -  person Cheers and hth. - Alf    schedule 21.05.2015
comment
isSelected() - что такое возвращаемое значение? Вы пробовали отладчик?   -  person Dmitry Sazonov    schedule 21.05.2015
comment
Многие редакторы автоматически сделают для вас отступ в вашем коде. Если у вас нет такого редактора, вы можете использовать бесплатный инструмент AStyle для исправления существующего кода. Затем просто держите его с правильным отступом.   -  person Cheers and hth. - Alf    schedule 21.05.2015
comment
Привет, я не проверял код, но похоже, что ты используешь только один цвет. Надписи черным по черному часто трудно разглядеть.   -  person Martin    schedule 21.05.2015


Ответы (1)


ИМО ты сделал это неправильно.

Вы должны составить свой графический элемент, используя QGraphicsPathItem, QGraphicsPolygonItem, QGraphicsRectItem и QGraphicsSimpleTextItem, вместо того, чтобы рисовать все самостоятельно. Просто предоставьте какой-нибудь корневой элемент, отвечающий за управление дочерними элементами (линейный текст и полигоны). Легче будет сделать это правильно.

Во-вторых, ваш метод рисования неверен. Вы должны восстановить исходное состояние рисовальщика!

И, наконец, я почти уверен, что ваша проблема вызвана неправильной реализацией boundingRect. Довольно распространенная ошибка при выполнении такого сложного рисунка красками.

person Marek R    schedule 21.05.2015