Не изменяемый размер QDialog с фиксированным размером в Qt?
у меня есть диалоговое приложение Qt. Теперь я не хочу, чтобы этот диалог был изменен. Я не уверен, как этого добиться. Я пробовал кучу вещей, но все же, когда диалог запускается, этот диалог можно изменить.
какое свойство я должен установить, чтобы отключить изменение размера диалогового окна / виджета.
Я тоже пробовал
setSizePolicy(QSizePolicy::Fixed);
, но я получаю сообщение об ошибке, говорящее..
sourcenimcac_settingsMain.cpp(36) : error C2248: **'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'** p:ThirdPartyExportsQtexport.3.3.1f14includeQtGui../../srcgui kernelqsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy' p:ThirdPartyExportsQtexport.3.3.1f14includeQtGui../../srcgui kernelqsizepolicy.h(34) : see declaration of 'QSizePolicy'
пожалуйста, помогите мне с этим.
9 ответов:
ошибка компиляции вы получаете, потому что вы пытаетесь передать
QSizePolicy::Policy
доsetSizePolicy(QSizePolicy)
, но нет никакого неявного преобразования изQSizePolicy::Policy
(что является политикой для одного измерения) доQSizePolicy
(который является классом, содержащим, среди прочего, одинPolicy
в размер (высота, ширина)).QSizePolicy
все равно не работает на виджетах верхнего уровня (windows).
setFixedSize()
работает только если вы заранее знаете размер диалогового окна (и обычно вы этого не делаете, что с изменением размеров шрифта и языки.) Вы можете сделатьwindow()->setFixedSize( window()->sizeHint() );
но это гораздо лучше использовать
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
это позволяет макету определять размер диалогового окна, но не позволяет изменять размер, что я предполагаю, что вы просили.
вам нужно изменить windowFlags диалогового окна и установить его в Qt::MSWindowsFixedSizeDialogHint.
это работает только в Windows.
для получения дополнительной информации см. Этот пример: http://doc.qt.digia.com/4.5/widgets-windowflags.html
Если вы используете QtCreator (конечно, вы), вы можете установить свойство HorizontalsizePolicy фиксированной и вертикальной политики также фиксированной. Затем вы можете установить максимальный размер в нужные вам размеры. Окно не будет максимизировать снова.
в коде вы можете сделать что-то вроде этого,
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 Creator, в Редакторе пользовательского интерфейса, нажмите на верхний объект в окне свойств, а затем прокрутите вниз в части макета. Вы должны увидеть свойство layoutSizeConstraint.
установить
layoutSizeConstraint
доSetFixedSize
.
из документации Qt
setSizePolicy()
метод либо принимает нулевой аргумент или два аргумента, но не может быть одним аргументом. Вот почему вы получаете эту ошибку компиляции. Из моего эксперимента, если вы не установите фиксированный размер. Этот метод не имеет смысла. Окно все еще может быть изменено.
в случае, если вы разрабатываете пользовательский интерфейс в QML и запускаете с помощью QDeclarativeView, попробуйте следующий код.
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()); . . . //To make the window non-resizable viewer->setFixedSize(viewer->width(),viewer->height());
здесь QmlApplicationViewer является производным от QDeclarativeView.