正在学习qt,请问下,我使用Qt openglwidget来绘制图片的时候,感觉内存占用有点大,我之前是使用label来进行绘制的,整个程序运行起来内存占用也就50mb左右,现在就只是加了个widget控件内存就到了100多,这个数值合理吗。我就只是想用gpu来绘制下图片,有没有其他的实现方式。谢谢各位解答
1条回答 默认 最新
关注【相关推荐】
- 看下这篇博客,也许你就懂了,链接:QOpenglWidget使用示例
- 除此之外, 这篇博客: OpenGL(3)之Qt窗口(QOpenGLWidget)中的 实例三:上下文配置格式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
- 配置格式:要获取与给定OpenGL版本或配置文件兼容的上下文,或请求深度和模具缓冲区,调用setFormat():
QOpenGLWidget *widget = new QOpenGLWidget(parent); QSurfaceFormat format; format.setDepthBufferSize(24); format.setStencilBufferSize(8); format.setVersion(3, 2); format.setProfile(QSurfaceFormat::CoreProfile); //必须在显示之前调用 widget->setFormat(format);- 对于OpenGL 3.0+上下文,当可移植性不重要时,我们可以使用下面这种方式来访问具体版本的的函数功能。
... void paintGL() { QOpenGLFunctions_3_2_Core *f = QOpenGLContext::currentContext()- >versionFunctions<QOpenGLFunctions_3_2_Core>(); ... f->glDrawArraysInstanced(...); ... } ...- 如上所述,全局地设置请求的格式,以便在应用程序的生命周期中应用于所有窗口和上下文,这样更简单、更健壮。
int main(int argc, char **argv) { QApplication app(argc, argv); QSurfaceFormat format; format.setDepthBufferSize(24); format.setStencilBufferSize(8); format.setVersion(3, 2); format.setProfile(QSurfaceFormat::CoreProfile); QSurfaceFormat::setDefaultFormat(format); MyWidget widget; widget.show(); return app.exec(); }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报