ubuntu上的QGLWidget没有显示任何内容

时间:2014-06-13 17:04:43

标签: qt opengl ubuntu qglwidget

我在ubuntu的Qt5项目中使用QGLWidget。扩展QGLWidget的类非常简单,只是覆盖了它的两个虚拟保护函数:

部首:

class MyGLWidget : public QGLWidget {
    Q_OBJECT
public:
    explicit MyGLWidget(QWidget *parent = 0);
protected:
    void initializeGL();
    void paintGL();
};

实现:

MyGLWidget::MyGLWidget(QWidget *parent) :
    QGLWidget(parent) {
}
void MyGLWidget::initializeGL() {
    glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
}
void MyGLWidget::paintGL() {
    glClear(GL_COLOR_BUFFER_BIT);
}

我创建了它的一个实例并调用了它的show方法,期望出现一个红色窗口,但我得到的是:

enter image description here

窗口是透明的,它显示在它下面的任何内容。

问题究竟是什么,我该如何解决? (我使用的是ubuntu 14.04 64bit,Qt5.3直接从qt-project.org安装)

1 个答案:

答案 0 :(得分:0)

我在同一版本的Ubuntu和Qt 5.4上发现了同样的问题。我不知道确切的原因,但我认为这是因为glClear命令没有被图形卡接收或执行,除非它后面跟着其他绘图命令。我扩展了paintGL函数以包含一些经典的测试代码:

void MyGLWidget::paintGL()
{
  glViewport(0, 0, width(), height());
  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  glClear(GL_COLOR_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(-20, 20, 20, -20, -1, 1);

  glColor3f(1.0f, 0.0f, 0.0f);
  glBegin(GL_TRIANGLES);
    glVertex3f(10, 10, 0);
    glVertex3f(-10, 10, 0);
    glVertex3f(0, -10, 0);
  glEnd();
}

使用附加代码渲染一个红色三角形,我发现当它没有出现时,清晰开始对我起作用。