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
的父级。 QMainWindow
有 centralWidget()
,它是 WidgetOpenGLDraw
的父级。所以这可能工作。
MainWindow* mainWindow = qobject_cast<MainWindow*>(parentWidget()->parentWidget());
if (mainWindow)
// do stuff
【讨论】:
【参考方案2】:看起来构造函数中的QWidget* parent
是QMainWindow。将此存储为成员,您可以从 WidgetOpenGLDraw 类中访问它。
听起来不太好,但应该可以。
【讨论】:
以上是关于Qt 从 QOpenGLWidget 访问 MainWindow的主要内容,如果未能解决你的问题,请参考以下文章