gpt4 book ai didi

c++ - Qt - 更新 PaintGL

转载 作者:行者123 更新时间:2023-11-28 06:19:16 27 4
gpt4 key购买 nike

我已经通过关于 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");

q调试()<

    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

}

最佳答案

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

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

关于c++ - Qt - 更新 PaintGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com