Не изменяемый размер QDialog с фиксированным размером в Qt? - PullRequest
67 голосов
/ 30 марта 2009

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

Пожалуйста, помогите мне с этим.

Ответы [ 9 ]

101 голосов
/ 20 июля 2009

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

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

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

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

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

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

51 голосов
/ 30 марта 2009

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

22 голосов
/ 14 октября 2009
this->setFixedSize(this->width(),this->height());
8 голосов
/ 30 марта 2009

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

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

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

4 голосов
/ 03 ноября 2012

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

3 голосов
/ 06 июня 2014

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

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

2 голосов
/ 01 февраля 2014

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

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» -> «Горизонтальная политика» имеет значение «Fixed»
    • убедитесь, что "sizePolicy" -> "Vertical Policy" имеет значение "Fixed"
    • убедитесь, что sizeGripEnabled не отмечен
1 голос
/ 08 марта 2012

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

0 голосов
/ 19 октября 2012

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

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

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

...