Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QGLWidget在初始化后未接收对resizeGL的调用_C++_Qt_Qglwidget - Fatal编程技术网

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似乎仍然忽略了大小策略的扩展部分。