C++ QGLWidget在初始化后未接收对resizeGL的调用
我的问题似乎与此(未回答)问题中的问题相同: 我正在为一个更大的应用程序测试一个新的C++ QGLWidget在初始化后未接收对resizeGL的调用,c++,qt,qglwidget,C++,Qt,Qglwidget,我的问题似乎与此(未回答)问题中的问题相同: 我正在为一个更大的应用程序测试一个新的QGLWidget。resizeGL方法连接起来,以更改glViewport并重新绘制OpenGL视图。我的QGLWidget不是布局的一部分,只是创建并显示如下: boost::shared_ptr<StandardCustomWidgetBuilder> builder(new StandardCustomWidgetBuilder()); WaterfallDirector<
QGLWidget
。resizeGL
方法连接起来,以更改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();
boost::共享
生成器(新标准CustomWidgetBuilder());
水务署署长(建造商);
director.construct();
std::unique_ptr widget=builder->getWidget();
widget->show();
在我的计算机上,这默认为创建一个640x480窗口,并在初始化时调用resizeGL
。每当我调整窗口大小时,resizeGL
永远不会被调用
为了解决这个问题,我尝试创建一个单独的
QWidget
,它有一个QVBoxLayout
,其中只包含CustomWidget
。这创建了一个非常小的窗口,因此我修复了CustomWidget
的sizeHint
和sizePolicy
,尽管这仍然不会影响调用resizeGL
。此时,我不确定如何进行操作。如果您还没有这样做,我建议您检查所有相关小部件的名称
例如,以下内容将确保窗口增长时小部件使用可用空间:
widget->setSizePolcy( QSizePolicy::MinimumExpanding,
QSizePolicy::MinimumExpanding );
我不认为QGLWidget的默认大小策略会使它想要扩展,所以我认为这可能需要更改。如果您还没有这样做,我建议检查所有相关部件的大小 例如,以下内容将确保窗口增长时小部件使用可用空间:
widget->setSizePolcy( QSizePolicy::MinimumExpanding,
QSizePolicy::MinimumExpanding );
我不认为QGLWidget的默认大小策略会使它想要扩展,所以我认为这可能需要更改。我在同事的帮助下解决了我的问题。事实证明,我已经实现了
event
方法,但忘记调用其中的QGLWidget::event
方法。小部件现在可以正确调整大小。在同事的帮助下,我解决了问题。事实证明,我已经实现了event
方法,但忘记调用其中的QGLWidget::event
方法。小部件现在可以正确调整大小。是否重载QGLWidget::resizeEvent()
?实现它,看看你是否正在处理调整大小的事件。我不会重载它。我在受保护的方法中添加了virtualvoidresizeevent(QResizeEvent*event)
,并在其中放置了一个断点,但它从未被命中。此时我所能做的最好的事情就是创建一个与QGLWidget类似的常规小部件,看看是否捕捉到它的调整大小事件。这可能有助于你集中精力解决这个问题。还有可能是widget的父对象的问题,我假设它为空。这应该没问题,但如果你发现将其作为QWidget的子组件解决了问题,这也会有所帮助。我开始创建一个包装器QWidget
,它会将调整大小事件转发到QGLWidget
,但这会导致一个灰色的小部件。你是否过载QGLWidget::resizeEvent()
?实现它,看看你是否正在处理调整大小的事件。我不会重载它。我在受保护的方法中添加了virtualvoidresizeevent(QResizeEvent*event)
,并在其中放置了一个断点,但它从未被命中。此时我所能做的最好的事情就是创建一个与QGLWidget类似的常规小部件,看看是否捕捉到它的调整大小事件。这可能有助于你集中精力解决这个问题。还有可能是widget的父对象的问题,我假设它为空。这应该没问题,但如果你发现让它成为QWidget的子代解决了问题,这也可能有帮助。我开始创建一个包装器QWidget
,它将调整大小事件转发到QGLWidget
,但结果是一个灰色的小部件。QGLWidget似乎仍然忽略了大小策略的扩展部分。QGLWidget似乎仍然忽略了大小策略的扩展部分。