如何在响应QVBoxLayout中获取QWidget的当前宽度?

问题描述:

我目前正在尝试将垂直滚动条的步长调整为可滚动和响应QVBoxLayout内部对象的高度。这样一个滚动步骤就可以精确地滚动一个小部件。 QVBoxLayout中的所有对象都具有相同的几何图形。如何在响应QVBoxLayout中获取QWidget的当前宽度?

因此,我需要QVBoxLayout中的一个对象的当前(活)高度。我已经尝试了以下方法:

该对象的初始化高度为300(未固定)。 然后通过调整包括QVBoxLayout的窗口大小来动态调整高度。

QWidget* pWidget = PointerToMyWidgetInsideQVBoxLayout; 
std::cout << "height:" << pWidget->height() << std::endl; /// @todo PHIL: height gives only initial value, not current height 
std::cout << "geometry-height:" << pWidget->geometry().height() << std::endl; 
std::cout << "frameSize-height:" << pWidget->frameSize().height() << std::endl; 
std::cout << "frameGeometry-height:" << pWidget->frameGeometry().height() << std::endl; 
std::cout << "normalGeometryheight:" << pWidget->normalGeometry().height() << std::endl; 
std::cout << "minimumHeight-height:" << pWidget->minimumHeight() << std::endl; 
std::cout << "maximumHeight-height:" << pWidget->maximumHeight() << std::endl; 
std::cout << "sizeHint-height:" << pWidget->sizeHint().height() << std::endl; 

这将导致以下的输出:

height:300 
geometry-height:300 
frameSize-height:300 
frameGeometry-height:300 
normalGeometryheight:300 
minimumHeight-height:0 
maximumHeight-height:16777215 
sizeHint-height:50 

很多感谢您的帮助!

+0

也许每次调整窗口小部件的时候都会执行'std :: cout'? – IAmInPLS

+0

子类'QWidget'并覆盖['resizeEvent'](http://doc.qt.io/qt-5/qwidget.html#resizeEvent)。然后在那里发出一些信号,发送一个新的大小作为参数。或者,如果您不想子类化,只需[安装事件过滤器](http://doc.qt.io/qt-5/eventsandfilters.html#event-filters)。 – thuga

+0

你的问题是什么?您输出**的值在您获得**时是正确的。在小部件被调整大小后,提示提示后,您可以获取值**。 –

方法QWidget::height()返回小部件的实际大小,不仅是初始化的大小:请参阅此answer

+0

谢谢你的帮助。我想出了问题: 我在事件循环执行小部件的调整大小之前请求了高度。 –