初始化后,QGLWidget没有接收到resizeGL的调用

QGLWidget not receiving calls to resizeGL after initialization

本文关键字:resizeGL 调用 QGLWidget 初始化      更新时间:2023-10-16

我有什么似乎是相同的问题,在这个(未回答的)问题问:Qt resizeGL问题

我正在为一个更大的应用程序测试一个新的QGLWidgetresizeGL方法被连接起来改变glViewport并重新绘制OpenGL视图。我的QGLWidget不是布局的一部分,只是被创建,如下所示:

boost::shared_ptr<StandardCustomWidgetBuilder>
        builder(new StandardCustomWidgetBuilder());
WaterfallDirector<StandardCustomWidgetBuilder, DataSource> director(builder);
director.construct();
std::unique_ptr<CustomWidget> widget = builder->getWidget();
widget->show();

在我的计算机上,这默认创建一个640x480的窗口,并在初始化时调用resizeGL。当我调整窗口大小时,resizeGL永远不会被调用。

在我试图补救这一点,我已经尝试创建一个单独的QWidget,其中QVBoxLayout只包含CustomWidget。这创建了一个非常小的窗口,所以我为CustomWidget修复了sizeHintsizePolicy,尽管这仍然对调用resizeGL没有影响。在这一点上,我不确定如何进行。

我在同事的帮助下解决了这个问题。事实证明,我已经实现了event方法,但忘记在其中调用QGLWidget::event方法。

如果您还没有这样做,我建议您检查所有相关部件的大小提示和大小策略。

例如,下面的代码将确保您的小部件在窗口增大时使用可用空间:

widget->setSizePolcy( QSizePolicy::MinimumExpanding,
                      QSizePolicy::MinimumExpanding );

我不认为QGLWidget的默认大小策略使它想要扩展,所以我认为这只是可能需要更改