【问题标题】:Qt - update PaintGLQt - 更新 PaintGL
【发布时间】:2015-04-12 08:32:45
【问题描述】:

我已经通过关于 SO 上 PaintGL 的不同线程进行了一些研究,但我无法找到我需要什么来使其工作/完全理解。

我正在尝试绘制一个立方体。每次点击我的按钮时,立方体都应该旋转。 (仅当它被点击时,没有计时器等) 要确定角度,我使用变量 xAngle。我可以通过函数 setAngleCube() 对其进行修改,但我的立方体似乎没有移动。 (我看到 var 'i' 每次都在改变。) 为什么?我怎样才能让它工作?

在我看来,立方体只是保留了构造函数的值,不再修改它们。

解决方案: 将此行添加到按钮的插槽中 ui->widget->setCubeAngle(ui->widget->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()

    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

}

【问题讨论】:

  • getCubeAngle() 返回无效?你确定吗?您是否尝试在 mijnGlptr 上调用 updateGL() 而不是在父级上调用 update()?
  • 抱歉修改了那个错字。好吧,当我尝试 updateGL 时,我的程序无法启动。我在 MyGLWidget 的构造函数中添加了这个: mijntussenPtr = new MyGLWidget(); .然后在 setangle: mijntussenPtr ->updateGL();
  • @FrankOsterfeld 当我不使用指针而直接调用它时,它不会崩溃,但我的立方体也不会移动。当函数paintGL 被调用时,xAngle 只停留在 15

标签: c++ qt opengl drawing


【解决方案1】:

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

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

【讨论】:

  • 我这样做了,但没有工作。当函数 paintGL 被调用时,var xAngle 保持 15。它不会被修改
  • спасибо。 Я буду смотреть ;)
  • @the1liquid Пожалуйста ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
相关资源
最近更新 更多