2012-03-30 7 views
5

Hierarchia child-parent jest następująca: mainWindow -> centralWidget -> frame -> widget.zmiana rozmiaru QMainWindow na podstawie widgetu podrzędnego?

Widget zmienia się w czasie trwania aplikacji, jednak zawsze ma ustawiony stały rozmiar. Chcę, aby QMainWindow zmieniał rozmiar w oparciu o to - aby mieć minimalny rozmiar potrzebny do wyświetlania wszystkich widżetów.

Aby to zrobić, obecnie muszę to zrobić.

widget->setFixedSize(x, y); 
frame->setFixedSize(frame->sizeHint()); 
centralWidget->setFixedSize(centralWidget->sizeHint()); 
mainWindow->setFixedSize(mainWindow->sizeHint()); 

Nie działa poprawnie, gdy zmieniam tylko rozmiar okna głównego. Aby to zadziałało, należy zmienić rozmiar wszystkich rodziców widgetu. Czy istnieje bardziej elegancki sposób? Czy można zmienić wielkość wywołania okna głównego na wszystkich jego elementach potomnych?

UWAGA: Wszystkie widżety oprócz "widgetu" mają automatyczne zarządzanie układem. Dlatego uważam za dziwne, że nie zmieniają rozmiaru w oparciu o "widget".

+1

nie można zrozumieć pytanie całkowicie, ale nie możesz zadzwonić 'setMinimumSize()' zamiast 'setFixedSize()'? – Chris

Odpowiedz

2

Zadaniem układu jest określenie rozmiaru i położenia widgetów. Więc jeśli jawnie zmienisz rozmiar widżetu podrzędnego, który znajduje się w układzie, musisz upewnić się, że nowy rozmiar jest poprawnie przekazywany za pośrednictwem układu układu. Można to zrobić, upewniając się, że funkcja sizeHint() zwraca nowy rozmiar. Wartość zwrócona przez sizeHint() będzie używana, gdy układ oblicza nowy rozmiar. Więc po zmianie wielkości zmiennej Hint() wystarczy wywołać metodę updateGeometry() [qt.nokia.com], która powiadomi system układu, że widget ulegnie zmianie i może zajść potrzeba zmiany geometrii.

Alternatywnym sposobem zapewnienia zmiany rozmiaru widgetu nadrzędnego w odpowiedzi na zmianę jego dziecka jest wywołanie metody setFixedSize() na elemencie podrzędnym.

Więcej szczegółów to sprawdzić ...

http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1

Należy pozwolić układ zarządzania rozmiaru widżetów. O ile jestem zaniepokojony jest 2 sytuacje:

  1. z układem podczas zmiany rozmiaru rodzica wszystkie dzieci są zmiany rozmiaru zbyt dotyczące polityki rozmiarem do nich dostarczane. Jeśli wybierzesz ustaloną politykę dzieci nie zostaną zmniejszone. Więc musisz zmienić ich rozmiar ręcznie ... ale to jest dziwne.

  2. Podczas zmiany rozmiaru dziecka takiego jak ty, rodzic nie jest automatycznie zmieniany. Musisz to zrobić ręcznie. Na szczęście istnieje "funkcja magiczna": AdjustSize.Jeśli wywołasz ją z QMainWindow, cały widget zostanie przeskalowany do rozmiaru optymalizacji.Możliwe jest (nie mogę tego przetestować tutaj), że to nie działa w czasie wykonywania, jeśli polityka rozmiaru jest ustawione na stałe.

nadzieję, że pomoże

+0

Qt 5.5. 'adjustSize 'nie działa,' resize (sizeHint()) 'robi. –

Powiązane problemy