QMainWindow中未更新QOpenGLWidget

我在QMainWindow中使用QtDesigner加载了一个QOpenGLWidget,并将其提升到我的Window类中。

小部件显示效果很好,我可以在主窗口中看到obj模型。 我从Window调用update()函数(我从qDebug()知道)。

然而,我的OpenGLWidget似乎无法在主窗口内重新绘制,除非我与主窗口交互(例如,调整它的大小或将其移动到我的屏幕上)。 我想这些交互意味着重新整个主窗口。

每次OpenGL窗口更新时,我都试图强制重新绘制整个主窗口,但我无法完成这项工作。

window.cpp中的update()函数:

void Window::update()
{
qDebug() << "update" ;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_transform.rotate(5.0f, QVector3D(0.4f, 0.3f, 0.3f));
emit updated() ;

// Schedule a redraw
paintGL();
}

m_transform是我的转换矩阵,它旋转我的obj模型。

重新定义mainwindow.h中的update()插槽,该插槽名为:

void MainWindow::update() {
qDebug() << "update mainwindow";
this->repaint();
}

信号和插槽之间的连接:

    QObject::connect(ui->GLWidget, SIGNAL(updated()), this, SLOT(update()));

编辑:窗口类中的paintGL函数:

void Window::paintGL()
{

qDebug() << "paintGl" ;
// Clear
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.2f, 1.0f);

// Render using our shader
m_program->bind();
m_program->setUniformValue(u_worldToCamera, m_camera.toMatrix());
m_program->setUniformValue(u_cameraToView, m_projection);
{
    m_program->setUniformValue(u_modelToWorld, m_transform.toMatrix());
    m_model.draw(m_program) ;
}
m_program->release();
qDebug() << "end paintGL";
}

我在QtCreator上使用Qt5.6,在Ubuntu上使用OpenGL 3.3。

链接地址: http://www.djcxy.com/p/39301.html

上一篇: QOpenGLWidget is not updated in QMainWindow

下一篇: why cant I draw points on the Qt Widget at the first time I click the button