无法理解如何使用drawText为qpainter旋转文本

时间:2017-08-04 14:27:01

标签: c++ qt

这是我的代码:

for (qint32 i = 0; i < leftF.size(); i++){
    QPointF p = leftF.at(i).screenpos;

    // Drawing the dot
    painter.setPen(QPen(Qt::blue));
    painter.drawEllipse(p,R,R);

    // Drawing a line
    painter.drawLine(p.x(),p.y(),p.x(),p.y()-lineH);

    // Drawing the text.
    painter.drawText(p.x(),p.y()-lineH,2*R,2*R,Qt::AlignCenter,QString::number(i));

    // Duration position.
    painter.rotate(-90);
    painter.drawText(p.x(),p.y()-lineH,4*R,2*R,Qt::AlignCenter,QString::number(leftF.at(i).dur));
    painter.rotate(90);

}

问题是我需要这一行中的文字:

painter.drawText(p.x(),p.y()-lineH,4*R,2*R,Qt::AlignCenter,QString::number(leftF.at(i).dur));

以90度角拍摄。但是看看这个解决方案:

How to rotate text for drawText?

我所做的就是我应该做的事情,但它不起作用,因为文字根本没有出现在屏幕上。

我如何在我想要的位置绘制旋转的文本? (在本例中为p.x(),p.y() - lineH)

1 个答案:

答案 0 :(得分:1)

我找到了它。万一其他人推翻这个问题。关键是在旋转之前平移坐标中心。所以在我的情况下:

painter.save();
painter.translate(p.x()-10,p.y()+2*lineH);
painter.rotate(-90);
painter.drawText(0,0,4*R,2*R,Qt::AlignCenter,QString::number(rightF.at(i).dur));
painter.restore();

这就像一个魅力!!