Ответ 1
Я не знаю, вы уже пробовали, но QWidget::setFixedSize
должен делать то, что вы хотите
У меня есть диалоговое приложение 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
не работает на виджетах верхнего уровня (windows).
setFixedSize()
работает только в том случае, если вы заранее знаете размер диалогового окна (и обычно вы этого не делаете, что меняет размер шрифта и языки). Вы можете сделать
window()->setFixedSize( window()->sizeHint() );
но гораздо лучше использовать
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
Это позволяет макету определять размер диалогового окна, но не позволяет изменять размер, который я предполагаю, это то, о чем вы просите.
this->setFixedSize(this->width(),this->height());
Вам нужно изменить windowFlags диалогового окна и установить его в Qt:: MSWindowsFixedSizeDialogHint.
Это работает только в окнах.
Для получения дополнительной информации см. этот пример: http://doc.qt.digia.com/4.5/widgets-windowflags.html
Если вы используете QtCreator (конечно, вы есть), вы можете установить свойство HorizontalsizePolicy на фиксированное, а вертикальная политика - на Fixed. Затем вы можете установить максимальный размер в нужные размеры. Окно больше не будет увеличиваться.
В коде вы можете сделать что-то вроде этого,
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 делаем следующее:
В 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.