2016-04-06 6 views
0

Ich versuche gerade, die Schrittweite einer vertikalen Bildlaufleiste an die Höhe der Objekte im scrollbaren und reaktionsfähigen QVBoxLayout anzupassen. Ein Scroll-Schritt scrollt genau ein Widget herunter. Alle Objekte in QVBoxLayout haben die gleiche Geometrie.Wie bekomme ich die aktuelle Breite von QWidget in responsive QVBoxLayout?

Daher würde ich die aktuelle (Live) Höhe eines der Objekte in der QVBoxLayout benötigen. Ich habe bereits die folgenden Methoden ausprobiert:

Das Objekt wird mit einer Höhe von 300 initialisiert (nicht behoben). Die Höhe wird dann dynamisch angepasst, indem das Fenster einschließlich des QVBoxLayout in der Größe verändert wird.

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; 

Daraus ergibt sich die folgende Ausgabe:

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

Vielen Dank im Voraus für Ihre Hilfe!

+0

Vielleicht ein 'std :: cout 'jedes Mal, wenn Sie die Größe des Widgets ändern? – IAmInPLS

+0

Unterklasse 'QWidget' und überschreiben [' resizeEvent'] (http://doc.qt.io/qt-5/qwidget.html#resizeEvent). Dann emittieren sie ein Signal, das eine neue Größe als Argument sendet. Oder wenn Sie keine Unterklasse erstellen möchten, installieren Sie einfach einen Ereignisfilter (http://doc.qt.io/qt-5/eventsandfilters.html#event-filters). – thuga

+0

Was ist dein Problem? Die von Ihnen ausgegebenen Werte ** sind zu dem Zeitpunkt korrekt, zu dem Sie sie erhalten **. Es liegt an dir, die Werte ** nach ** der Größe des Widgets, Hinweis Hinweis zu bekommen. –

Antwort

1

Die Methode QWidget::height() gibt die tatsächliche Größe des Widgets zurück, nicht nur das bei der Initialisierung: siehe answer.

+0

Vielen Dank für Ihre Hilfe. Ich habe das Problem herausgefunden: Ich habe die Höhe angefordert, bevor die Ereignisschleife die Größenänderung des Widgets ausgeführt hat. –