Ich habe ein Widget zum Einfügen, das so aussieht
%Vor% Ein QWidget-Element, das zwei QVBoxLayouts enthält, von denen jedes ein oder mehrere QLabels enthält.
Dieses Widget wird in ein vertikales Layout mit einer Streckzelle eingefügt, so dass alle Widgets dieser Art nach oben und nach unten gehen auf die kleinere mögliche Höhe verkleinern.
Daraus ergibt sich etwas.
%Vor%Aber bevor ich diese Einfügung mache, möchte ich wissen, welche Größe das Widget im eingefügten Layout haben würde. Vielleicht die minimale Größe, die das interne Layout zulässt. Ich bin mir nicht sicher, wie ich es nennen soll.
Ich habe bereits viele Ansätze ausprobiert, wie das Einfügen des Widgets in ein alternatives unsichtbares Layout, so dass ich seine Höhe beim Einfügen abrufen kann. Das sollte das gleiche sein wie das Widget, wenn es in mein endgültiges Layout eingefügt wird.
Aber aus irgendeinem Grund bekomme ich immer 480 oder 478, wenn das Widget bei vertikaler Betätigung maximal 50 Pixel hoch ist. Also bin ich total verloren.
Ich muss das tun, weil ich das Widget brauche, um es beim Einfügen zu animieren, und ich muss die Höhe kennen, die ich brauche, um von der Höhe 1 zu animieren.
Wie kann ich das tun?
Ohne den genauen Code zu haben, ist es schwer zu sagen, aber nachdem ich versucht habe, Ihr Beispiel zu reproduzieren, würde ich aus der obigen Beschreibung vorschlagen, die folgenden Dinge zu betrachten:
Es klingt so, als würden Sie widget->height()
aufrufen, bevor das Widget angezeigt wurde. Versuchen Sie stattdessen, stattdessen widget->sizeHint().height()
aufzurufen. Die Methode QWidget :: sizeHint () gibt an, wie groß das Widget sein würde mag sein , wenn die übergeordnete Geometrie keine anderen Einschränkungen festlegt.
Wenn Sie sizeHint()
erhalten und trotzdem die falsche Antwort erhalten, sehen Sie sich die Dokumentation für QWidget :: ensurePolished () . Ich glaube, dass es wichtig ist, dies zu nennen, um genauere Geometrien für Widgets zu erhalten, die noch nicht angezeigt wurden:
QWidget ruft diese Funktion auf, nachdem sie vollständig erstellt wurde, aber bevor sie das erste Mal angezeigt wird. Sie können diese Funktion aufrufen, wenn Sie sicherstellen möchten, dass das Widget vor einer Operation poliert wird, z. B. kann die korrekte Schriftgröße in der sizeHint () -Reimplementierung des Widgets erforderlich sein.
Und wenn Sie noch Probleme haben, dann schauen Sie sich die Dokumentation für QWidget :: sizePolicy () und die Klasse QSizePolicy-Klassenreferenz . Ich muss zugeben, dass, wie oft ich die Dokumente auf enum QSizePolicy :: Policy lese, sie niemals alle einsinken. Es ist wirklich einfach, einen zu haben falscher Größenrichtwert vermasselt Ihre Layouts.
Es kann sich lohnen, mit den verschiedenen Größenrichtlinien in Qt Designer zu experimentieren, bevor Sie tatsächlich eine Größenrichtlinie anwenden.