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

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

0

Решение

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

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

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

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

1

Другие решения


По вопросам рекламы [email protected]