Qt 从 QOpenGLWidget 访问 MainWindow

Posted

技术标签:

【中文标题】Qt 从 QOpenGLWidget 访问 MainWindow【英文标题】:Qt access MainWindow from QOpenGLWidget 【发布时间】:2015-11-13 12:16:12 【问题描述】:

我在 MainWindow 中有一个 OpenGL 小部件。

我想从它的代码中访问 MainWindow

我已经尝试使用 qApp->activeWindow()findChild() 组合,但它不起作用。

WidgetOpenGLDraw 构造函数如下所示: WidgetOpenGLDraw::WidgetOpenGLDraw(QWidget* parent):QOpenGLWidget(parent),gl(nullptr)

编辑1>

这也会崩溃:((MainWindow*)qApp->activeWindow())->fname_here();

【问题讨论】:

How to access to parent widget on qt?的可能重复 @LogicStuff 我没有对插槽做任何事情,我已经尝试从我的构造函数中转换父参数,但它不起作用。 dynamic_cast 也许? @LogicStuff 如果你的意思是这样的(dynamic_cast<MainWindow*>((qApp->activeWindow())))->fname_here();,那么它不起作用。您的意思是我应该尝试使用父构造函数参数吗? 【参考方案1】:

QMainWindow 不是WidgetOpenGLDraw 的父级。 QMainWindowcentralWidget(),它是 WidgetOpenGLDraw 的父级。所以这可能工作。

MainWindow* mainWindow = qobject_cast<MainWindow*>(parentWidget()->parentWidget());
if (mainWindow) 
 // do stuff

【讨论】:

【参考方案2】:

看起来构造函数中的QWidget* parent 是QMainWindow。将此存储为成员,您可以从 WidgetOpenGLDraw 类中访问它。

听起来不太好,但应该可以。

【讨论】:

以上是关于Qt 从 QOpenGLWidget 访问 MainWindow的主要内容,如果未能解决你的问题,请参考以下文章

qt glsl渲染rgb

Qt 5.5 示例,缺少 QOpenGLWidget

在qt的QOpenGLWidget开启opengl的抗锯齿

Qt OpenGL (QOpenGLWidget) - 简单三角形

Qt - 使用 QOpenGLWidget 显示图像的步骤

如何让 qt 设计器自定义 QOpenGLWidget 小部件背景透明?