Неразмерный QDialog с фиксированным размером в Qt?

У меня есть диалоговое приложение 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'

Просьба помочь мне в этом.

Ответ 1

Я не знаю, вы уже пробовали, но QWidget::setFixedSize должен делать то, что вы хотите

Ответ 2

Ошибка компиляции заключается в том, что вы пытаетесь передать QSizePolicy::Policy в setSizePolicy(QSizePolicy), но нет никакого неявного преобразования из QSizePolicy::Policy (который является политикой для одного измерения) в QSizePolicy (который является классом содержащий, среди прочего, один Policy за размер (высота, ширина)). Тем не менее, QSizePolicy не работает на виджетах верхнего уровня (windows).

setFixedSize() работает только в том случае, если вы заранее знаете размер диалогового окна (и обычно вы этого не делаете, что меняет размер шрифта и языки). Вы можете сделать

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

но гораздо лучше использовать

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

Это позволяет макету определять размер диалогового окна, но не позволяет изменять размер, который я предполагаю, это то, о чем вы просите.

Ответ 3

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

Ответ 4

Вам нужно изменить windowFlags диалогового окна и установить его в Qt:: MSWindowsFixedSizeDialogHint.

Это работает только в окнах.

Для получения дополнительной информации см. этот пример: http://doc.qt.digia.com/4.5/widgets-windowflags.html

Ответ 5

Если вы используете QtCreator (конечно, вы есть), вы можете установить свойство HorizontalsizePolicy на фиксированное, а вертикальная политика - на Fixed. Затем вы можете установить максимальный размер в нужные размеры. Окно больше не будет увеличиваться.

Ответ 6

В коде вы можете сделать что-то вроде этого,

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 делаем следующее:

  • Выберите виджет диалогового окна
  • Найдите виджет диалогового окна в окне объекта
  • В окне объекта щелкните правой кнопкой мыши объект диалогового окна, чтобы открыть меню
  • Выберите "Ограничения размера" → "Установить максимальный размер" в меню
  • Щелкните правой кнопкой мыши по объекту диалога, чтобы открыть меню
  • Выберите "Ограничения по размеру" → "Установить минимальный размер"
  • В окне свойств,
    • обеспечить "размер политики" → "Горизонтальная политика" имеет значение "Исправлено"
    • обеспечить "размер политики" → "Вертикальная политика" имеет значение "Исправлено"
    • гарантировать, что значение "sizeGripEnabled" не проверено

Ответ 7

В QT Creator в редакторе пользовательского интерфейса нажмите на верхний объект в окне свойств, а затем прокрутите его в нижней части части макета. Вы должны увидеть свойство layoutSizeConstraint.

Установите layoutSizeConstraint на SetFixedSize.

Ответ 8

Из документации Qt метод setSizePolicy() либо принимает нулевой аргумент, либо два аргумента, но не может быть одним аргументом. Вот почему вы получаете эту ошибку компиляции. Из моего эксперимента, если вы не установите фиксированный размер. Этот метод не имеет смысла. Окно все еще может быть изменено.

Ответ 9

Если вы разрабатываете пользовательский интерфейс в QML и запускаете с помощью QDeclarativeView, попробуйте приведенный ниже код.

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

Здесь QmlApplicationViewer получен из QDeclarativeView.