如何在Qt 5中实际使用OpenGL

  • 本文关键字:OpenGL Qt 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作为更大的小部件的一部分;这是因为它不能,还是因为我能找到的所有示例都懒得将小部件用作自己的顶级窗口?)

经过一番周旋,我的问题显然是由窗口中的另一个对象(QListView)引起的,默认情况下会占用尽可能多的空间,这使得OpenGL小部件消失了,因为它没有最小的大小。

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

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

相关内容

  • 没有找到相关文章

最新更新