2016-04-06 9 views
0

私は現在、スクロール可能で反応性の高いQVBoxLayout内のオブジェクトの高さに垂直スクロールバーのステップサイズを適合させようとしています。そのため、1つのスクロール・ステップで1つのウィジェットを正確にスクロールします。 QVBoxLayout内のすべてのオブジェクトは同じジオメトリを持ちます。レスポンシブQVBoxLayoutの内部でQWidgetの現在の幅を取得する方法は?

したがって、QVBoxLayout内のオブジェクトの1つの現在の(ライブ)高さが必要です。私はすでに以下のメソッドを試しました:

オブジェクトは高さ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

ありがとうございます。私は問題を見つけ出しました: イベントループがウィジェットのサイズ変更を実行する前に高さを要求しました。 –

関連する問題