【发布时间】: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