QGLWidget渲染区域没有正确调整大小
QGLWidget rendering area not resizing proprely
我正在使用Qt开发一个OpenGL应用程序,直到昨天我还在子类化QOpenGLWidget
来创建我的自定义小部件,但是在将它添加到主应用程序之后,它是一个带有几个按钮和三个QGraphicsView
的QMainWindow
,它运行得很慢。我已经尝试使用QGLWidget
和应用程序运行相同,没有OpenGL小部件。
我的问题是,我已经使子类QGLWidget
的小部件没有适当地调整大小(或至少OpenGL渲染区域没有)。
我将使用Qt 5.5中的hellogl2示例给您一个示例。
使用QOpenGLWidget
我得到:
使用QGLWidget
我得到:
我只是将父类从QOpenGLWidget
更改为QGLWidget
,其余的代码是相同的。同样的事情也发生在我的应用程序中。
我试图找到一个解决方案,但我不能。有人可以告诉我为什么会发生这种情况,如何解决它?
谢谢!
首先,按照@ddriver的建议,坚持使用最新的方法,远离被弃用的代码,这是一个好主意。
我已经使用QGLWidget写了很多代码,它没有问题。它做了我需要的一切,所以我现在坚持使用它。
这是你的方法的主要问题。您采用了qt 5.5中的hellogl示例,并简单地将父组件从QOpenGLWidget替换为QGLWidget。不幸的是,它们不能类似地处理resize事件。
QOpenglGLWidget确实根据resize事件给出的宽度和高度改变视口,正如他们的文档中提到的那样(不太清楚地使用双重否定)。链接:http://doc.qt.io/qt-5/qopenglwidget.html#resizeGL
检查resizeEvent()
函数,该函数会调用resizeGL()
。现在QGL小部件不会为您做这些。它所做的只是使opengl上下文是当前的,这意味着你必须以老派的方式在resizeGL()
函数中调用glViewport()
。我从qt4.8
void GLWidget::resizeGL(int width, int height)
{
int side = qMin(width, height);
glViewport((width - side) / 2, (height - side) / 2, side, side);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
#ifdef QT_OPENGL_ES_1
glOrthof(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0);
#else
glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0);
#endif
glMatrixMode(GL_MODELVIEW);
}
这里是qt4.8版本的hellogl的链接:http://doc.qt.io/qt-4.8/qt-opengl-hellogl-example.html
注意如何调用glViewport()
来调整resizeGL()
函数中的framebuffer大小。这是由较新的QOpenGLWidget自动完成的,甚至在达到这个函数之前。如果您选择坚持使用QGLWidget,则需要自己处理此问题。
- 为char数组调整zlib-zpipe
- 调整大小后指向元素值的指针unordered_map有效?
- 在C++中调整向量中的索引
- 哪些库可以通过Opencv调整曝光率
- 将QGraphicsItem的移动区域限制在多边形区域内
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- 在容量内调整矢量大小时的性能影响
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 将 boost::odeint 与向量类一起使用,而无需调整向量的大小
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 将摄像机调整到俯视图
- Qt 图表条形图调整大小崩溃
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 如何使中心区域调整为 QDockWidgets 位置
- 当GLFW窗口调整大小时,渲染区域不会改变
- 滚动区域中的大小调整问题
- Qt调整窗口大小以适应滚动区域问题中的纵横比
- QGLWidget渲染区域没有正确调整大小