我如何在Qt 5中实际使用OpenGL?

时间:2016-05-06 02:47:09

标签: c++ qt opengl qt5

简单地说,我不能为我的生活弄清楚如何实际使用QOpenGLWidgetQOpenGLWindow之类的东西。我希望渲染我可以成为MDI中窗口的子窗口小部件,但没有任何效果。

这是我目前为小部件设置的代码(至少是涉及OpenGL的部分):

Viewport::Viewport(QWidget * parent) : QOpenGLWidget(parent) { }

void Viewport::initializeGL() {
    initializeOpenGLFunctions();
}

void Viewport::paintGL() {
    // first, clear the screen
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);
}

以下是我如何使用小部件:

vp = new Viewport;
vp->resize(QSize(320,240));
hbox->addWidget(vp);

结果是我什么都没看到。我只是在窗口的另一个小部件旁边看到一小块空的空间,但那就是它。没有像我试图清除的黑屏,甚至没有320x240大小的空白空间。

就像我说的那样,我无法以任何我能找到的方式做到这一点,这真的令人沮丧。我错过了一些明显的东西吗现有的文档很少,所以很难分辨我是不是,或者是否有一些我遇到的奇怪的角落案例。 (例如,我发现的任何文档都没有使用QOpenGLWidget作为更大小部件的一部分;是因为不能,或者因为我能找到的所有示例都是只是懒得将小部件用作自己的顶级窗口?)

1 个答案:

答案 0 :(得分:1)

经过一些更多的摆弄后,事实证明我的问题显然是由窗口中的其他对象(QListView)引起的,默认占用尽可能多的空间,使得OpenGL小部件消失,因为它没有没有最小尺寸。

换句话说,通过更改QListView以获得QSizePolicy::Preferred大小调整策略(因为调整窗口大小现在可以让您看到OpenGL小部件)或者通过提供OpenGL来解决问题小部件最小或固定大小。

(顺便说一句,我真的希望这可能比仅偶然发现它更明显。)