【问题标题】:How to rotate text for drawText?如何旋转drawText的文本?
【发布时间】:2013-07-23 20:29:00
【问题描述】:

我想将文本旋转 45 度?

QFont font;
font.setPixelSize(12);

//grid
for(int i = 0; i < 10; i++){
    painter->drawLine(100, 100 + i * 800/9, 900, 100 + i * 800/9);
    str = QString::number((double)9 - i, 'd', 1);
    painter->setFont(font);
    painter->drawText(75, 100 + i * 800/9 - 6, 40, 40, 1, str);
}

【问题讨论】:

    标签: c++ qt qt4 qt5 qpainter


    【解决方案1】:

    painter-&gt;drawText(75, 100 + i * 800/9 - 6, 40, 40, 1, str);之前和painter-&gt;rotate(-45);之后插入painter-&gt;rotate(45);(恢复坐标系的旋转角度):

    painter->rotate(45);
    painter->drawText(75, 100 + i * 800/9 - 6, 40, 40, 1, str);
    painter->rotate(-45);
    

    根据您的意思是顺时针还是逆时针 45 度,您可能需要否定旋转角度。

    旋转坐标系后,您绘制的所有内容都将旋转绘制,直到您恢复画家。保存和恢复画家状态的一种便捷方法是使用QPainter::save()QPainter::restore()

    【讨论】:

    • 但是 QPainter.rotate() - 旋转坐标系。所以现在drawText中的x和y坐标不正确
    【解决方案2】:
    painter->save(); // saves current painter state
    // painter->rotate(45); clockwise rotation 
    // painter->rotate(-45); counter clockwise rotation
    painter->restore(); // restores painter state
    

    【讨论】:

    • 可以省略旋转(-45)或保存/恢复
    【解决方案3】:

    要旋转由画家绘制的文本(和任何其他可绘制对象),只需调用

    painter->rotate(yourAngle);
    

    之前

    painter->drawText();
    

    如果您想返回之前的状态,请再次调用 rotate。

    painter->rotate(-yourAngle);
    

    【讨论】:

      【解决方案4】:

      为什么把这么简单的任务搞得这么复杂?!!!

      void CustomLabel::paintEvent(QPaintEvent* e)
      {
          QPainter painter(this);
      
          painter.translate(m_rect.center());
          painter.rotate(m_rotation);
          painter.translate(-m_rect.center());
          painter.drawText(m_rect, Qt::AlignHCenter | Qt::AlignVCenter, m_text);
      
          QWidget::paintEvent(e);
      }
      

      任何时候 CustomLabel 的容器改变它的大小,您都可以设置 m_rect 或使用 this-&gt;rect() 本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多