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

StackOverflow https://stackoverflow.com/questions/696209

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть диалоговое приложение 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 (что является политикой для одного измерения), чтобы 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 значение фиксированное, а для вертикальной политики также значение фиксированное.Затем вы можете установить для параметра MaximumSize нужные размеры.Окно больше не развернется.

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

Установить 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 сделайте следующее:

  1. Выберите виджет диалогового окна
  2. Найдите виджет диалогового окна в окне объекта.
  3. В окне объекта щелкните правой кнопкой мыши объект диалогового окна, чтобы открыть всплывающее меню.
  4. В меню выберите «Ограничения размера» -> «Установить максимальный размер».
  5. Щелкните правой кнопкой мыши еще раз объект диалогового окна, чтобы открыть всплывающее меню.
  6. Выберите «Ограничения размера» -> «Установить минимальный размер».
  7. В окне свойств
    • убедитесь, что «sizePolicy» -> «Горизонтальная политика» имеет значение «Фиксированное»
    • убедитесь, что «sizePolicy» -> «Вертикальная политика» имеет значение «Фиксированное»
    • убедитесь, что «sizeGripEnabled» не отмечен галочкой

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

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

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

Здесь QmlApplicationViewer является производным от QDeclarativeView.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top