Qt - 更新PaintGL

时间:2015-04-12 08:32:45

标签: c++ qt opengl drawing

我已经通过关于PaintGL的不同线程对SO进行了一些研究,但是我无法找到让我的工作/完全理解所需的东西。

我正在尝试绘制一个立方体。我的按钮被点击后立即旋转立方体。 (只有点击它,没有定时器等) 为了确定角度,我使用变量xAngle。我可以通过函数setAngleCube()修改它,但我的立方体似乎没有移动。 (我看到var'i'每次都被更改。) 为什么?我怎么能让它发挥作用?

对我来说,看起来立方体只是保留了构造函数的值,并且不再使它们变形了。

溶液: 在按钮的插槽中添加此行  UI->小窗口> setCubeAngle(UI->小窗口> getCubeAngle()+ 5);

归功于@Alexander Chernin

我的代码:

MyGLWidget::MyGLWidget(QWidget *parent)
    : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
{
    xRot = 0;
    yRot = 0;
    zRot = 0;
    xAngle=15;

   qDebug("constructor\n") ;

}
void MyGLWidget::setCubeAngle(int angle)
{
    xAngle = angle;
    qDebug("angle set\n");  
}

int MyGLWidget::getCubeAngle()
{
     return xAngle;
}

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
 Glptr = new MyGLWidget();
}

void Widget::on_pushButton_clicked()
{
   static int i;

   i+=5;
    Glptr->setCubeAngle(i); 
   update();
   qDebug()<<i<<endl;
ui->widget->setCubeAngle(ui->widget->getCubeAngle()+5); //SOLUTION
}


void MyGLWidget::paintGL()
{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    qDebug("painting cube\n");

qDebug()&LT;

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glRotatef(getCubeAngle(),0.0,1.0,0.0); //rotate 30 degress around y-axis
    glRotatef(5.0,1,0.0,0.0); //rotate 15 degress around x-axis

    glBegin(GL_QUADS);

 //back
       glColor3f(1,0,0);
       glVertex3f(-0.5, 0.2,-0.5 );
       glVertex3f(-0.7, 0.2,-0.5);
       glVertex3f(-0.7, -0.2,-0.5 );
       glVertex3f(-0.5, -0.2,-0.5);

//some similar code to draw other sides of the cube

}

1 个答案:

答案 0 :(得分:1)

尝试在MyGLWidget :: setCubeAngle中调用updateGL():

 void MyGLWidget::setCubeAngle(int angle)
 {
    xAngle = angle;
    qDebug("angle set\n");  
    updateGL();
 }