2016-04-06 74 views
0

我目前正在嘗試將垂直滾動條的步長調整爲可滾動和響應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

你的問題是什麼?您輸出**的值在您獲得**時是正確的。在小部件被調整大小後,提示提示後,您可以獲取值**。 –

回答

1

方法QWidget::height()返回小部件的實際大小,不僅是初始化的大小:請參閱此answer

+0

謝謝你的幫助。我想出了問題: 我在事件循環執行小部件的調整大小之前請求了高度。 –

相關問題