2009-03-30 20 views
62

Mam aplikację dialogową Qt. Teraz nie chcę, aby to okno dialogowe było skalowalne. Nie jestem pewien, jak to osiągnąć. Próbowałem wielu rzeczy, ale nadal, gdy okno dialogowe uruchamia to okno dialogowe może być zmieniana.Nie można zmienić rozmiaru QDialog o stałym rozmiarze w Qt?

Co to jest właściwość, którą powinienem ustawić, aby wyłączyć zmianę rozmiaru okna dialogowego/widżetu.

Próbowałem też

setSizePolicy(QSizePolicy::Fixed); 

ale pojawia się błąd mówiąc ..

 
source\nimcac_settingsMain.cpp(36) : error C2248: 
**'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'** 
     p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ 
kernel\qsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy' 
     p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ 
kernel\qsizepolicy.h(34) : see declaration of 'QSizePolicy' 

Uprzejmie mi pomóc z tym.

Odpowiedz

48

ja nie wiem, czy już próbowałem, ale QWidget::setFixedSize powinien robić to, co chcesz

92

Błąd kompilacji dostaniesz dlatego próby przekazać QSizePolicy::Policy do , ale nie istnieje żadna niejawna konwersja z QSizePolicy::Policy (która jest zasadą jednego wymiaru) na QSizePolicy (która jest klasą zawierającą, między innymi, jeden Policy na wymiar (wysokość, szerokość)). QSizePolicy mimo to nie działa na najwyższych widżetach (oknach).

setFixedSize() działa tylko wtedy, gdy znasz rozmiar okna dialogowego z wyprzedzeniem (a zazwyczaj nie, co z powodu zmiany rozmiaru czcionki i języków). Można zrobić

window()->setFixedSize(window()->sizeHint()); 

ale jest znacznie lepiej użyć

window->layout()->setSizeConstraint(QLayout::SetFixedSize); 

który pozwala układ określenia rozmiaru okna, ale nie pozwala na zmianę rozmiaru, które zakładam, jest to, co zostało z prośbą o .

+0

'window-> layout() -> setSizeConstraint (QLayout :: SetFixedSize);' jest prawie to, czego potrzebuję, ponieważ aktualizuje się zmieniając czcionkę itp. Ale chciałbym naprawić tylko wysokość, ale nie szerokość. czy to możliwe? –

21
this->setFixedSize(this->width(),this->height()); 
+6

Lub po prostu 'this-> setFixedSize (this-> size());' –

+14

Lub jeszcze prostsze :) 'setFixedSize (size());' – lapis

1

Z dokumentacji Qt, setSizePolicy() metoda albo bierze zerowego argumentu lub dwa argumenty, ale nie może być jeden argument. Właśnie dlatego pojawia się ten błąd kompilacji. Z mojego eksperymentu, jeśli nie ustawisz stałego rozmiaru. Ta metoda nie ma zastosowania. Okno można w dalszym ciągu zmieniać.

0

Jeśli projektujesz interfejs użytkownika w QML i uruchamiasz przy użyciu QDeclarativeView, wypróbuj poniższy kod.

QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()); 
. 
. 
. 
//To make the window non-resizable 
viewer->setFixedSize(viewer->width(),viewer->height()); 

Tutaj QmlApplicationViewer pochodzi z QDeclarativeView.

5

Jeśli używasz QtCreator (oczywiście, że jesteś), możesz ustawić właściwość HorizontalsizePolicy na stałe i pionowe również na stałe. Następnie możesz ustawić maximumSize na pożądane wymiary. Okno nie zmaksymalizuje się ponownie.

2

W kodzie można zrobić coś takiego,

Dialog->resize(581, 292); 
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
sizePolicy.setHorizontalStretch(0); 
sizePolicy.setVerticalStretch(0); 
sizePolicy.setHeightForWidth(WaterLevelEditorDialog->sizePolicy().hasHeightForWidth()); 
Dialog->setSizePolicy(sizePolicy); 
Dialog->setMinimumSize(QSize(581, 292)); 
Dialog->setMaximumSize(QSize(581, 292)); 
Dialog->setSizeGripEnabled(false); 

W Qt Creator zrobić w następujący sposób:

  1. Wybierz widżet okna dialogowego
  2. Zlokalizuj widget okno dialogowe, w oknie Object
  3. W oknie Obiekt kliknij prawym przyciskiem myszy obiekt okna dialogowego, aby wyskoczyć menu
  4. Wybierz "Ograniczenie rozmiaru" s”->«Ustaw maksymalny rozmiar»z menu
  5. Prawo kliknij ponownie na obiekcie dialogowym popup menu
  6. wybierz«ograniczenia wielkości»->«Ustaw minimalny rozmiar»
  7. W oknie właściwości
    • zapewniają "sizePolicy" -> "polityki horyzontalnej" ma wartość "Fixed"
    • zapewnić "sizePolicy" - wartość> "Polityka pionie" ma "Fixed"
    • zapewnić "sizeGripEnabled" nie jest zaznaczone
3

W kreatorze QT w edytorze interfejsu użytkownika kliknij górny obiekt w oknie właściwości, a następnie przewiń u dołu w części Układ. Powinieneś zobaczyć właściwość layoutSizeConstraint.

Ustaw layoutSizeConstraint na SetFixedSize.

Powiązane problemy