2009-03-30 18 views
62

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.QDialog no redimensionable con tamaño fijo en Qt?

Cuál es la propiedad que debo configurar para deshabilitar el diálogo/tamaño del widget.

También probé

setSizePolicy(QSizePolicy::Fixed); 

pero me da 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' 

favor me ayude con esto.

Respuesta

48

No sé si ya lo intentó, pero QWidget::setFixedSize debe hacer lo que quiera

92

El error de compilación que se obtiene es porque intenta pase 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 no funciona en widgets de nivel superior (Windows) de todos modos.

setFixedSize() solo funciona si conoce el tamaño del diálogo de antemano (y generalmente no, con el cambio de tamaños de fuente e idiomas). Usted puede hacer

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

pero es mucho mejor usar

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

Eso permite que el diseño de determinar el tamaño del cuadro de diálogo, pero no permite cambiar el tamaño, que supongo que es lo que pedías .

+0

'window-> layout() -> setSizeConstraint (QLayout :: SetFixedSize);' es casi lo que necesito porque se actualiza con el cambio de fuente, etc. Pero me gustaría corregir solo la altura pero no el ancho. es posible? –

21
this->setFixedSize(this->width(),this->height()); 
+6

O simplemente 'this-> setFixedSize (this-> size());' –

+14

O incluso más simple :) 'setFixedSize (size());' – lapis

1

A partir de la documentación de Qt, ya sea setSizePolicy() método toma argumento cero o dos argumentos, pero no puede ser un 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.

0

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.

5

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.

2

En el código se puede 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 hacer de la siguiente manera,

  1. Seleccione el widget cuadro de diálogo
  2. Busque el widget de cuadro de diálogo en la ventana de objetos
  3. En la ventana de objeto, haga clic con el botón secundario en el objeto del cuadro de diálogo para abrir un menú emergente
  4. Seleccione "Restricción de tamaño" s" -> 'Establecer Tamaño máximo' del menú
  5. Haga clic derecho de nuevo el objeto de diálogo popup un menú
  6. Seleccionar 'limitaciones de tamaño' -> 'Establecer tamaño mínimo'
  7. En la ventana Propiedades,
    • garantizar "sizePolicy" -> "política horizontal" tiene el valor "fijo"
    • asegurar "sizePolicy" -> "política vertical" tiene el valor "fijo"
    • asegurar "sizeGripEnabled" no está activada
3

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 hacia abajo en la parte de diseño. Debería ver la propiedad layoutSizeConstraint.

Establezca layoutSizeConstraint en SetFixedSize.

Cuestiones relacionadas