2014-05-07 36 views
6

Ich habe ein einfaches QStackedWidget mit 3 verschiedenen QWidgets darin. Die Mindestgröße der QWidgets beträgt (350x200), (200x100) und (450x450).Qt QStackedWidget Größe ändern Problem

Also das Problem, das ich habe ist, wenn ich die QStackedWidget Größe ändern, hat es eine minimale Größe des größten QWidget in ihm. Wenn ich also zum zweiten QWidget umschalte (was das QWidget mit der Größe von (200x100) ist), wird das QStackedWidget nur wegen des größten QWidgets innerhalb des QWidget kleiner (450x450). Ich möchte, dass die Größe an das aktuelle QWidget angepasst wird und diese Mindestgröße entfernt wird.

+0

Diese Frage wurde schon gefragt [hier] (http://stackoverflow.com/questions/14480696/qstackedwidget-different-contents-same-size?rq=1) und ich sah es nach der Einlieferung . die verknüpfte Frage hatte eine geringere Qualität, also habe ich sie bearbeitet und ich stimme dafür, diese als Duplikat zu schließen. – UmNyobe

+0

Alles klar, danke, Bruder. Sich umgesehen, aber nicht gesehen –

+0

Der Titel dieser Frage war falsch. Sie hatten geringe Chancen, es zu lesen, selbst wenn es im Suchergebnis angezeigt wurde. – UmNyobe

Antwort

2

Gute Frage. Leider bietet Qt keine automatischen Mechanismen zur Größenanpassung, abhängig von den untergeordneten Widgets (Bei automatischer Einstellung bedeutet das, dass Sie nichts tun müssen). Die meisten der Fokus liegt auf dem Ausbau (see the size policies)

Sie haben zwei Möglichkeiten:

  1. Verwenden Sie das Signal und Schlitze Mechanismus in der Klasse, die diese Widgets erstellen. Sie müssen das Signal void QStackedWidget ::currentChanged (int index) abhören und das stackedwidget auf die Größe des Widgets unter index anpassen. Das ist ziemlich schnell zu programmieren.

  2. Decorate QStackedWidget and define the size properties. Grundsätzlich sollten sowohl sizeHint() als auch minimumSizeHint() die Größe des aktuellen Widgets zurückgeben. Addwidget(QWidget*) müssen auch geändert werden. Nützlich, wenn Sie überall gestapelte Widgets verwenden.

0

Schritt 1: Überlast-Methode:

void resizeEvent(QResizeEvent*)

Schritt 2: Rufen Sie 'Größe ändern' und 'select Seite':

QRect rect; 
rect.setBottomRight(stackedWidget->geometry().bottomRight()); 
currentWidget->setGeometry(rect); 
+0

Dies funktioniert nur, wenn das QStackedWidget selbst nicht in einem Layout ist. Wenn es in einem Layout ist, müssen Sie seine Größe über Größenhinweis, Mindestgröße, Größenrichtlinie usw. festlegen. Die Antworten auf die andere Frage, http://stackoverflow.com/questions/14480696/resize-qstackedwidget-to-the-page - was geöffnet ist (als Duplikat markiert) ist nützlicher. –

2

denke ich, dass die einfachste Lösung ist Unterklasse QStackedWidget und überschreiben sizeHint und minimumSizeHint, um den Hinweis für das aktuelle Widget anstelle des Maximums aller Widgets zurückzugeben. Zum Beispiel:

class StackedWidget : public QStackedWidget 
{ 
    QSize sizeHint() const override 
    { 
    return currentWidget()->sizeHint(); 
    } 

    QSize minimumSizeHint() const override 
    { 
    return currentWidget()->minimumSizeHint(); 
    } 
}; 
Verwandte Themen