ubuntu 上的 QGLWidget 啥也没显示

Posted

技术标签:

【中文标题】ubuntu 上的 QGLWidget 啥也没显示【英文标题】:QGLWidget on ubuntu shows nothingubuntu 上的 QGLWidget 什么也没显示 【发布时间】:2014-06-13 17:04:42 【问题描述】:

我在 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 方法,希望出现一个红色窗口,但我得到的是:

窗口是透明的,它显示它下面的任何东西。

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

【问题讨论】:

您可以尝试从resizeGL 拨打glViewport 吗? 这看起来很可疑,就像您正在尝试在合成窗口管理器中进行单缓冲渲染。您是否分配了双缓冲像素格式并且是否正确交换了缓冲区?这两件事都做不到就会产生这种情况。 【参考方案1】:

我在相同版本的 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();

使用额外的代码来渲染一个红色三角形,我发现清除开始对我有用,而以前没有。

【讨论】:

以上是关于ubuntu 上的 QGLWidget 啥也没显示的主要内容,如果未能解决你的问题,请参考以下文章

Flutter web ListView.builder啥也没显示

php5-sqlite 啥也没显示

discord.py Spotify 似乎啥也没做

QGLWidget 上的透明 QGraphicsWebview 导致叠加图像

为啥我啥也没做,wireshark却从打开就一直在捕捉报文呢?

2/12 啥也没学