2013-05-09 13 views
7

Mam QGLWidget, który chcę zmienić rozmiar do określonej rozdzielczości (większe niż okno zawierające). Moim zamiarem jest, aby okno rozszerzyło się, dopóki widget nie pasuje do wnętrza, ale nie może znaleźć sposobu, aby to zrobić.Zmień rozmiar okna w celu dopasowania do zawartości

Próbowałem kilku poleceń po zmianie rozmiaru QGLWidget, aby działało bez powodzenia. Wymienię tutaj wyniki:

  • nic więcej: Widget zachodzi na całe okno. Ostatecznie zostanie przeskalowany w celu dopasowania powrotem w mniejszym oknie
  • mainWindow.adjustSize(): Widget zostanie zmieniony na (0, 0)
  • mainWindow.resize(mainWindow.sizeHint()): patrz wyżej
  • mainWindow.resize(mainWindow.minimumSizeHint()): patrz wyżej

Czytałem również w this thread, przed wykonaniem zmiany rozmiaru okna głównego I należy uruchomić pętlę zdarzeń, aby ponownie obliczyć nowe rozmiary, więc wstawiłem QCoreApplication::processEvents, aby to zrobić, bez żadnego widocznego efektu.

Jak zmienić rozmiar okna za pomocą widżetu?

Edit

GLWidget nie jest jedynym widget z okna. Jest osadzony w rozdzielaczu wraz z polem grupowym.

Odpowiedz

6

http://qt-project.org/doc/qt-4.8/qwidget.html#sizePolicy-prop

http://qt-project.org/doc/qt-4.8/qsizepolicy.html#Policy-enum

http://qt-project.org/doc/qt-4.8/qwidget.html#setFixedSize

Więc zakładając, że masz QGLWidget zagnieżdżone wewnątrz QMainWindow jako centralny widget, trzeba ustawić politykę rozmiaru QGLWidget.

Na przykład:

QGLWidget * glw; // in your header for QMainWindow 

...

// In your constructor for QMainWindow 
glw = new QGLWidget; 
this->setCentralWidget(glw); 
glw->setFixedSize(500, 500); 

this->adjustSize(); 

nadzieję, że pomoże.

+0

Choć to naprawdę zmienia rozmiar okna do potrzebnego rozmiaru to zapobiega dalszemu rozmiaru przez użytkownika. Z dokumentacji: 'Ustawia minimalny i maksymalny rozmiar widgetu na s, zapobiegając w ten sposób jego rosnącemu lub zmniejszającemu się. Po prostu próbowałem zapisać i przywrócić stare minimalne i maksymalne rozmiary, ale to nie powoduje żadnych zmian . – Nobody

+0

Zamiast 'setFixedSize()', wypróbuj 'setMinimumSize()' i użyj 'setSizePolicy()'. Naprawdę masz dużą kontrolę nad tym, jak rzeczy rozwijają się i reagują za pomocą 'setSizePolicy()'. 'setFixedSize()' robi kilka rzeczy na raz, więc prawdopodobnie nie jest to, co chcesz w tym przypadku. – phyatt

+0

'minimumSize' wydaje mi się również niewłaściwe. Użytkownik powinien mieć możliwość dowolnej zmiany rozmiaru. Po prostu potrzebuję okna, aby podskoczyć do rozmiaru, który pasuje do żądanego rozmiaru 'QGLWidget'. – Nobody

1

Mam aplikację, która musi być bardzo podobna do twoich wymagań, dlatego opublikuję tutaj moje rozwiązanie. Obraz obejmujący okno, które można swobodnie rozszerzać i kurczliwe, i można go zmienić na oryginalny rozmiar, a następnie można go rozszerzyć/skurczyć.

Użyłem widżetu QLabel do wyświetlenia obrazu, ale powinien również działać z innymi typami widgetów. Stworzyłem widżet o rozmiarze początkowym i QSizePolicy::Ignored.

label->resize (w, h); // initial size 
label->setSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored); 

Widget etykieta była w QVBoxLayout z kilku przycisków w oknie, ale może współpracować z innymi rodzajami układ zbyt.

okno i widget obraz może być zmieniany do pierwotnego rozmiaru obrazka z tym kodem:

label->resize (w, h); // change to original size 
label->setMinimumSize (w, h); // prevent it from collapsing to zero immediately 
window->adjustSize(); // resize the window 
label->setMinimumSize (0, 0); // allow shrinking afterwards 
+0

Niestety, to nie działa dla mnie. Widżet jest zmieniany, ale 'adjustSize()' w oknie zwija okno poniżej rozmiaru widżetu, być może jest spowodowane przez splittery, których używam. – Nobody

Powiązane problemy