I apologize, after I wrote above post, I realized that I must invert/normalize the angle by myself. I don't know why inverted() function inverted all QTransform, so below is the final (or part of) code:
@
QLineF centerLine = this->centerLine();
qreal angle = centerLine.angle();
if (centerLine.dy() >= 0 || centerLine.dy() <= 0) {
angle = -angle;
}
QPolygonF arrowHead;
arrowHead.push_back(QPointF(0,0));
arrowHead.push_back(QPointF(arrowHead.first().x() + 5, arrowHead.first().y() - 5));
arrowHead.push_back(QPointF(arrowHead.first().x(), arrowHead.first().y() - 10));
arrowHead.push_back(QPointF(arrowHead.first().x() - 5, arrowHead.first().y() - 5));
arrowHead.push_back(arrowHead.first());
QTransform transform = QTransform().translate(intersectPoint.x(), intersectPoint.y()).rotate(angle - 90, Qt::ZAxis);
QPolygonF transformed = transform.map(arrowHead);
@
Note at the 15 line we subtract 90 to angle (angle - 90).
Now we can add any types of arrow heads:
@
QPolygonF arrowHead;
arrowHead.push_back(QPointF(0,0));
arrowHead.push_back(QPointF(arrowHead.first().x() + 5, arrowHead.first().y() - 5));
//arrowHead.push_back(QPointF(arrowHead.first().x(), arrowHead.first().y() - 10));
arrowHead.push_back(arrowHead.first());
arrowHead.push_back(QPointF(arrowHead.first().x() - 5, arrowHead.first().y() - 5));
arrowHead.push_back(arrowHead.first());
@
@
QPolygonF arrowHead;
arrowHead.push_back(QPointF(0,0));
arrowHead.push_back(QPointF(arrowHead.first().x() + 5, arrowHead.first().y() - 5));
//arrowHead.push_back(QPointF(arrowHead.first().x(), arrowHead.first().y() - 10));
//arrowHead.push_back(arrowHead.first());
arrowHead.push_back(QPointF(arrowHead.first().x() - 5, arrowHead.first().y() - 5));
arrowHead.push_back(arrowHead.first());
@
.....
Thanks, Mario.