QOainGLWidget未在QMainWindow中更新

时间:2016-08-17 09:34:47

标签: c++ qt opengl

我已经在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";
}

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

0 个答案:

没有答案