2017-02-23 4 views
0

Wie füge ich ein Bild zu einem Dialog in Qt hinzu?Layout eines Bildes in einem Qt-Dialog

Ich weiß, das wurde oft in der Vergangenheit gefragt und die meisten Antworten kommen mit einem QLabel und seinem Mitglied. dies in der Regel ist jedoch nicht das, was der Benutzer (me) beabsichtigt:

  • A QLabel mit einem pixmap Satz beteiligt sich nicht an der umgebenden QLayout. Das heißt, es verweigert einfach die Größenänderung, wenn die Größe des Dialogs geändert wird, wie dies beispielsweise bei QPushButton der Fall wäre. Zwei QPushButton s nebeneinander in einer QHorizontalLayout werden (ähnlich) den verfügbaren horizontalen Raum zwischen ihnen gleichmäßig teilen. Eine QLabe mit einer Pixmap neben einer QPushButton im selben Layout wird nur in der Größe bleiben.

  • Standardmäßig ändert eine leere QLabel ihren Inhalt nicht, wenn die Größe geändert wird.

  • Aber wenn es tut (QLabel::setResizeContents) wird es Seitenverhältnis nicht beibehalten.

Gibt es einen nativer Weg, um eine Pixmap auf einem Dialog gezeigt zu haben, und es vernünftigerweise haben im Layout teilnehmen?

+0

Ihre Frage ist breit. – eyllanesc

+0

Ich glaube nicht. Warum tun Sie? – Kamajii

+0

Sie können ein Grafikszenenansicht-Framework ausprobieren. Fügen Sie ein Bild als Pixel-Map-Element in eine Szene ein. –

Antwort

0

Die Größenänderung von Artikeln kann über die Eigenschaft sizePolicy verwaltet werden. Von Qt documentation:

sizePolicy: QSizePolicy

hält Diese Eigenschaft des Standard-Layout Verhalten des Widgets. Wenn es ein QLayout gibt, das die untergeordneten Elemente dieses Widgets verwaltet, wird die in diesem Layout angegebene Richtlinie verwendet. Wenn es kein solches QLayout gibt, wird das Ergebnis dieser Funktion verwendet.

Die Standardrichtlinie ist Preferred/Preferred, was bedeutet, dass das Widget frei skalierbar ist, aber vorzugsweise die Größe sizeHint() hat. Schaltflächenähnliche Widgets legen die Größenrichtlinie so fest, dass sie sich horizontal ausdehnen können, aber vertikal fixiert sind. Dasselbe gilt für Lineedit-Steuerelemente (wie QLineEdit, QSpinBox oder eine bearbeitbare QComboBox) und andere horizontal orientierte Widgets (wie QProgressBar). QToolButtons sind normalerweise quadratisch, so dass sie das Wachstum in beiden Richtungen erlauben. Widgets, die verschiedene Richtungen unterstützen (z. B. QSlider, QScrollBar oder QHeader), spezifizieren die Dehnung nur in der entsprechenden Richtung . Widgets, die Bildlaufleisten bereitstellen können (normalerweise Unterklassen von QScrollArea) neigen dazu anzugeben, dass sie zusätzlichen Speicherplatz verwenden können und dass sie mit weniger als sizeHint() auskommen können.

Ich glaube, Sie für QSizePolicy::Expanding Größe Politik suchen:

Die sizeHint() eine vernünftige Größe, aber das Widget kann und noch nützlich sein geschrumpft werden.Das Widget kann zusätzlichen Raum verwenden, so dass es so viel Platz wie möglich erhalten sollte (z. B. die horizontale Richtung eineshorizontalen Schiebereglers).

Setzen Sie dies für Ihre QLabel und überprüfen Sie, wie es die Größe ändert. Versuchen Sie andere Werte von QSizePolicy::Policy enum.

+0

Dies liefert keine Lösung für das Problem. –

Verwandte Themen