example qt qdialog

example - QDialog no redimensionable con tamaño fijo en Qt?



qdialog pyqt5 (9)

Debe cambiar WindowFlags del cuadro de diálogo y configurarlo en Qt :: MSWindowsFixedSizeDialogHint.

Esto solo funciona en Windows .

Para obtener más información, consulte este ejemplo: http://doc.qt.digia.com/4.5/widgets-windowflags.html

Tengo una aplicación de diálogo Qt. Ahora no quiero que ese diálogo sea redimensionable. No estoy seguro de cómo lograr esto. Intenté muchas cosas, pero aun así, cuando se lanza el diálogo, se puede cambiar el tamaño de este.

¿Cuál es la propiedad que debo configurar para deshabilitar el tamaño del diálogo / Widget?

También intenté

setSizePolicy(QSizePolicy::Fixed);

Pero me sale un error diciendo ...

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''

Amablemente ayúdame con esto.


Desde la documentación de Qt, el método setSizePolicy() toma cero argumentos o dos pero no puede ser un solo argumento. Es por eso que obtienes este error de compilación. De mi experimento, si no configuras el tamaño fijo. Este método no tiene uso. La ventana aún se puede cambiar de tamaño.


El error de compilación que obtiene es porque intenta pasar una QSizePolicy::Policy a setSizePolicy(QSizePolicy) , pero no hay una conversión implícita de QSizePolicy::Policy (que es la política para una dimensión) a QSizePolicy (que es una clase que contiene, entre otras cosas, una Policy por dimensión (alto, ancho)). QSizePolicy embargo, QSizePolicy no funciona en los widgets de nivel superior (Windows).

setFixedSize() solo funciona si conoce el tamaño del diálogo por adelantado (y generalmente no, con el cambio de tamaño de fuente e idiomas). Tu puedes hacer

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

pero es mucho mejor usar

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

Eso permite que el diseño determine el tamaño del diálogo, pero no permite el cambio de tamaño, que supongo que es lo que estaba pidiendo.


En QT Creator, en el editor de la interfaz de usuario, haga clic en el objeto superior en la ventana de propiedades, luego desplácese en la parte inferior en la parte de diseño. Debería ver la propiedad layoutSizeConstraint.

Establezca el layoutSizeConstraint en SetFixedSize .


En caso de que esté diseñando UI en QML y ejecutando QDeclarativeView, intente con el siguiente código.

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

Aquí QmlApplicationViewer se deriva de QDeclarativeView.


En el código puedes hacer algo como esto,

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);

En QtCreator haz lo siguiente,

  1. Seleccione el widget de cuadro de diálogo
  2. Ubique el widget de cuadro de diálogo en la ventana de objetos
  3. En la ventana de objetos, haga clic con el botón secundario en el objeto del cuadro de diálogo para abrir un menú emergente
  4. Seleccione "Restricciones de tamaño" -> "Establecer tamaño máximo" en el menú
  5. Haga clic derecho de nuevo en el objeto de diálogo para abrir un menú emergente
  6. Seleccione "Restricciones de tamaño" -> "Establecer tamaño mínimo"
  7. En la ventana de propiedades,
    • asegurar que "sizePolicy" -> "Horizontal Policy" tenga el valor "Fixed"
    • asegúrese de que "sizePolicy" -> "Política vertical" tenga el valor "Fixed"
    • asegúrese de que "sizeGripEnabled" no esté marcado

No sé si ya lo has probado, pero QWidget::setFixedSize debería hacer lo que quieras


Si usa QtCreator (por supuesto que lo es), puede establecer la propiedad HorizontalsizePolicy en Fixed y Vertical Policy también en Fixed. Luego puede establecer maximumSize a las dimensiones que desee. La ventana no se maximizará de nuevo.


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