QT에서 고정 된 크기를 갖는 응답 할 수없는 QDialog?
문제
QT 대화 상자 응용 프로그램이 있습니다. 이제 나는 그 대화 상자를 재개 할 수 있기를 원하지 않습니다. 이것을 달성하는 방법을 잘 모르겠습니다. 나는 많은 것을 시도했지만 대화 상자가 시작될 때이 대화 상자가 크기를 조정할 수 있습니다.
대화 상자/위젯 크기 조정을 비활성화하기 위해 설정 해야하는 속성은 무엇입니까?
나는 또한 시도했다
setSizePolicy(QSizePolicy::Fixed);
하지만 오류가 발생합니다 ..
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'
친절하게 도와주세요.
해결책
이미 시도했는지 모르겠지만 QWidget::setFixedSize
원하는대로해야합니다
다른 팁
당신이 얻는 컴파일 오류는 당신이 통과하려고하기 때문입니다. QSizePolicy::Policy
에게 setSizePolicy(QSizePolicy)
, 그러나 암시 적 변환은 없습니다 QSizePolicy::Policy
(1 차원에 대한 정책) QSizePolicy
(무엇보다도 하나는 Policy
치수 당 (높이, 너비)). QSizePolicy
어쨌든 최상위 위젯 (Windows)에서는 작동하지 않습니다.
setFixedSize()
대화 상자의 크기를 미리 알고있는 경우에만 작동합니다 (일반적으로 글꼴 크기와 언어가 변경되는 것). 넌 할 수있어
window()->setFixedSize( window()->sizeHint() );
그러나 사용하는 것이 훨씬 낫습니다
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
이는 레이아웃이 대화 상자의 크기를 결정할 수 있지만 크기 조정을 허용하지 않으며, 내가 요구했던 것이라고 가정합니다.
this->setFixedSize(this->width(),this->height());
대화 상자의 Windowflags를 변경하여 qt :: mswindowsfixedsizeialoghint로 설정해야합니다.
이것은 Windows에서만 작동합니다.
자세한 내용은이 예를 참조하십시오.http://doc.qt.digia.com/4.5/widgets-windowflags.html
QTCreator를 사용하는 경우 (물론 귀하는) 속성 HorizOntalSizePolicy를 고정 및 수직 정책으로 고정하여 고정 할 수 있습니다. 그런 다음 최대 규모를 원하는 치수로 설정할 수 있습니다. 창이 다시 극대화되지 않습니다.
QT Creator의 UI 편집기에서 속성 창의 상단 객체를 클릭 한 다음 레이아웃 부분의 하단을 스크롤하십시오. 레이아웃 시즈 세인트 속성이 표시되어야합니다.
설정 layoutSizeConstraint
에게 SetFixedSize
.
코드에서는 이런 일을 할 수 있습니다.
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);
qtcreator에서 다음과 같이
- 대화 상자 위젯을 선택하십시오
- 객체 창에서 대화 상자 위젯을 찾습니다
- 객체 창에서 대화 상자 개체를 마우스 오른쪽 버튼으로 클릭하여 메뉴를 팝업하십시오.
- 메뉴에서 "크기 제약 조건" -> "최대 크기 설정"을 선택하십시오.
- 대화 상자 개체를 다시 마우스 오른쪽 버튼으로 클릭하여 메뉴를 팝업하십시오.
- "크기 제약 조건" -> "최소 크기 설정"을 선택하십시오.
- 속성 창에서
- "sizepolicy"-> "수평 정책"은 "고정"가치가 있는지 확인하십시오.
- "sizepolicy"-> "수직 정책"은 "고정"가치가 있는지 확인하십시오.
- "sizegripenabled"가 확인되지 않았는지 확인하십시오
QT 문서에서 setSizePolicy()
메소드는 제로 인수 또는 두 개의 인수를 취하지 만 하나의 인수가 될 수는 없습니다. 그렇기 때문에이 컴파일 오류가 발생합니다. 내 실험에서 고정 크기를 설정하지 않으면. 이 방법은 쓸모가 없습니다. 창을 여전히 재판용 할 수 있습니다.
QML에서 UI를 설계하고 qdeclarativeView를 사용하여 시작하는 경우 아래 코드를 사용해보십시오.
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());
여기서 qmlapplicationViewer는 qdeclarativeView에서 파생됩니다.