当前位置: 代码迷 >> QT开发 >> Qt Qpainter,该如何解决
  详细解决方案

Qt Qpainter,该如何解决

热度:207   发布时间:2016-04-25 03:53:00.0
Qt Qpainter
我希望在widget上画两条直线,并且可以旋转;
我的代码如下:

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);    

    painter.setBrush(Qt::red);
    painter.setPen(QPen(Qt::red,Qt::SolidLine));

    //L1
    painter.translate(100,100);//以指针根部为旋转中心
    painter.rotate(Angle1);
    painter.translate(-100,-100);//恢复原点
    painter.drawLine(50,100,100,100);

    //L2
    painter.translate(200,100);//以指针根部为旋转中心(移动原点)
    painter.rotate(Angle2);
    painter.translate(-200,-100);//恢复原点
    painter.drawLine(150,100,200,100);
}

实际是第一条线可以正常的旋转,但是第二条线却是很乱;
是不是第一条线处理完了之后要复原一些东西啊,求各位大牛帮忙。

------解决方案--------------------
每次使用完后用painter.restore()进行恢复;
------解决方案--------------------


void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);    

    painter.setBrush(Qt::red);
    painter.setPen(QPen(Qt::red,Qt::SolidLine));

    //L1
    painter.save();
    painter.translate(100,100);//以指针根部为旋转中心
    painter.rotate(Angle1);
    painter.translate(-100,-100);//恢复原点
    painter.drawLine(50,100,100,100);
    painter.restore();

    //L2
    painter.save();
    painter.translate(200,100);//以指针根部为旋转中心(移动原点)
    painter.rotate(Angle2);
    painter.translate(-200,-100);//恢复原点
    painter.drawLine(150,100,200,100);
    painter.restore();

}