OpenGL:QApplication的执行流程

Posted

技术标签:

【中文标题】OpenGL:QApplication的执行流程【英文标题】:OpenGL: Execution Flow of QApplication 【发布时间】:2015-02-10 21:55:04 【问题描述】:

我试图在一些 C++ OpenGL 起始代码中跟踪执行路径,但 main 方法几乎没有做更多的事情:

QApplication app(argc, argv);
MainWindow main_window;
main_window.resize(QSize(width, height));
main_window.show();
return app.exec();

这些是 .h 和 .cpp 文件:

GLShape.h    GLTransformStack.h  main.cpp         Matrix4x4.h
GLState.cpp  GLWidget.cpp        MainWindow.h
GLState.h    GLWidget.h          Matrix3x3.h

似乎很明显所有各种功能是什么,但我找不到任何东西被调用/实例化的地方。我怀疑这是 QApplication 在幕后完成的。

QApplication 相对于这些文件有标准的执行流程吗?

特别是,我想创建一个组织为形状树的动画。为此,我尝试添加一个类 PivotGroup,它包含所有与旋转点相关联的形状组。每个 PivotGroup 都有 PivotGroup 子节点的向量,因此可以构造一棵树。

代码创建树的最佳位置在哪里?作为一个小部件,它似乎是有意义的,但我不知道是否正在创建一个或多个小部件。

【问题讨论】:

GLWidget.cpp 看起来像是包含 OpenGL 渲染循环的明显候选者。你看过吗? @Dan:是的。我注意到在 OP 中(也许我不清楚)。但是因为我无法追踪执行路径,我不确定是否正在实例化一个或多个小部件。 GLWidget 类有一个构造函数和一个初始化方法,但运行时的实际实例化似乎不在这些文件中。 通常在 Qt 中使用 OpenGL 时,GLWidget 类将在 MainWindow 类的构造函数中实例化,这两个类都继承自 Qt 类。 @user3256930:亲爱的杰布斯!我怎么错过了?我认为MainWindow 是可能的候选人,不知何故错过了它,然后创造了一个关于QApplication 的阴谋论。 :-) 非常感谢您的回复。如果您想要功劳,请将您的评论移至答案,我会接受。 【参考方案1】:

通常当使用带有 Qt 的 OpenGL 时,GLWidget 类将在 MainWindow 类的构造函数中实例化,这两个类都继承自 Qt 类。您还可以在 MainWindow 中添加其他小部件。

【讨论】:

以上是关于OpenGL:QApplication的执行流程的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL - 旋转问题 - Qt

QApplication 执行分段故障错误

45.Qt openGL实现三维绘图

OpenGL ES之“深度测试”与“模板测试”的使用流程

如何使用 OpenGL 3.3 格式的 QPainter?

Qt OpenGL (QOpenGLWidget) - 简单三角形