developer tip

Qt에서 크기가 고정 된 크기 조정이 불가능한 QDialog?

optionbox 2020. 11. 3. 07:57
반응형

Qt에서 크기가 고정 된 크기 조정이 불가능한 QDialog?


Qt 대화 상자 응용 프로그램이 있습니다. 이제 해당 대화 상자의 크기를 조정할 수 없습니다. 이것을 달성하는 방법을 잘 모르겠습니다. 나는 많은 것을 시도했지만 여전히 대화 상자가 시작될 때이 대화 상자의 크기를 조정할 수 있습니다.

대화 상자 / 위젯 크기 조정을 사용하지 않도록 설정해야하는 속성은 무엇입니까?

나는 또한 시도했다

setSizePolicy(QSizePolicy::Fixed);

그런데 ..

source \ nimcac_settingsMain.cpp (36) : 오류 C2248 :
** 'QSizePolicy :: QSizePolicy': 'QSizePolicy'클래스에 선언 된 개인 멤버에 액세스 할 수 없습니다. **
        p : \ ThirdPartyExports \ Qt \ export \ 4.3 \ 4.3.1f14 \ include \ QtGui \ ../../ src \ gui \
kernel \ qsizepolicy.h (177) : 'QSizePolicy :: QSizePolicy'선언 참조
        p : \ ThirdPartyExports \ Qt \ export \ 4.3 \ 4.3.1f14 \ include \ QtGui \ ../../ src \ gui \
kernel \ qsizepolicy.h (34) : 'QSizePolicy'선언 참조

친절하게 도와주세요.


이미 시도했는지 모르겠지만 QWidget::setFixedSize원하는대로해야합니다


당신이 전달하려고하기 때문에 당신이 얻을 컴파일 에러는 QSizePolicy::PolicysetSizePolicy(QSizePolicy)있지만로부터 암시 적 변환이 없습니다 QSizePolicy::Policy에 (하나 개의 차원에 대한 정책) QSizePolicy(클래스가 다른 것들 사이에 포함되어, 하나의 Policy차원 당이 (높이, 폭)) . QSizePolicy어쨌든 최상위 위젯 (창)에서는 작동하지 않습니다.

setFixedSize()대화 상자의 크기를 미리 알고있는 경우에만 작동합니다 (일반적으로 글꼴 크기와 언어를 변경하는 경우). 넌 할 수있어

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

하지만 사용하는 것이 훨씬 낫습니다

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

그러면 레이아웃이 대화 상자의 크기를 결정할 수 있지만 크기 조정을 허용하지 않습니다.


this->setFixedSize(this->width(),this->height());

대화 상자의 windowFlags를 변경하고 Qt :: MSWindowsFixedSizeDialogHint로 설정해야합니다.

이것은 Windows에서만 작동합니다 .

자세한 내용은 다음 예제를 참조하십시오. http://doc.qt.digia.com/4.5/widgets-windowflags.html


QtCreator를 사용하는 경우 (물론 그렇습니다) HorizontalsizePolicy 속성을 fixed로, Vertical Policy도 Fixed로 설정할 수 있습니다. 그런 다음 maximumSize를 원하는 치수로 설정할 수 있습니다. 창이 다시 최대화되지 않습니다.


QT Creator의 UI 편집기에서 속성 창에서 맨 위 개체를 클릭 한 다음 레이아웃 부분에서 맨 아래로 스크롤합니다. layoutSizeConstraint 속성이 표시되어야합니다.

(가) 설정 layoutSizeConstraintSetFixedSize.


코드에서 다음과 같이 할 수 있습니다.

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에서 다음과 같이하십시오.

  1. 대화 상자 위젯 선택
  2. 개체 창에서 대화 상자 위젯을 찾습니다.
  3. 개체 창에서 대화 상자 개체를 마우스 오른쪽 버튼으로 클릭하면 메뉴가 나타납니다.
  4. 메뉴에서 "크기 제한"-> "최대 크기 설정"을 선택합니다.
  5. 대화 상자 개체를 다시 마우스 오른쪽 버튼으로 클릭하면 메뉴가 팝업됩니다.
  6. "크기 제한"-> "최소 크기 설정"을 선택합니다.
  7. 속성 창에서
    • "sizePolicy"-> "Horizontal Policy"에 "Fixed"값이 있는지 확인합니다.
    • "sizePolicy"-> "Vertical Policy"에 "Fixed"값이 있는지 확인합니다.
    • "sizeGripEnabled"가 선택되지 않았는지 확인하십시오.

Qt 문서에서 setSizePolicy()메서드는 인수가 없거나 두 개이지만 하나의 인수가 될 수는 없습니다. 이것이이 컴파일 오류가 발생하는 이유입니다. 내 실험에서 고정 크기를 설정하지 않으면. 이 방법은 소용이 없습니다. 창은 여전히 ​​크기를 조정할 수 있습니다.


In case you are designing UI in QML and launching using QDeclarativeView, try the below code.

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

Here QmlApplicationViewer is derived from QDeclarativeView.

참고URL : https://stackoverflow.com/questions/696209/non-resizeable-qdialog-with-fixed-size-in-qt

반응형