Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Qt. Extender diálogos

Estas en el tema de Qt. Extender diálogos en el foro de C/C++ en Foros del Web. Hola: Sigo cuando puedo con el libro The Book of Qt4 de Daniel Molkentin. En su momento vi cómo hacer diálogos extensibles, mediante la función ...
  #1 (permalink)  
Antiguo 01/04/2016, 11:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Qt. Extender diálogos

Hola:

Sigo cuando puedo con el libro The Book of Qt4 de Daniel Molkentin. En su momento vi cómo hacer diálogos extensibles, mediante la función setExtension(QWidget*), pero tal y como se muestra en el ejemplo, esto hace que aparezca otro widget junto al original.

Pero en el mismo ejemplo, sale un widget que realmente cambia de tamaño y de contenido al pulsar un botón que muestra opciones extendidas (en concreto en el ejemplo es el diálogo de KDE Run, aunque no es relevante)

Y esa es la duda, ¿como se plantean este tipo de diálogos?

Gracias como siempre!
__________________
Mi calculadora en Qt
  #2 (permalink)  
Antiguo 01/04/2016, 12:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Extender diálogos

Bueno, como otras veces he preguntado sin ver la propia ayuda de Qt.

Aquí hay un ejemplo completo:

http://doc.qt.io/qt-4.8/qt-dialogs-e...n-example.html

Lo único que la ventana no recupera su tamaño cuando vuelve a la versión no extendida. Voy a ver si yo soy capaz de hacer esa parte
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 02/04/2016, 00:11
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Extender diálogos

No tengo el pc a mano pero creo recordar que si pones las políticas de size como fixed el diálogo es capaz de volver a su tamaño original... Eso sí, no podrás redimensionarlo a mano.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #4 (permalink)  
Antiguo 02/04/2016, 11:18
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Extender diálogos

Hola eferion...había probado varias cosas siempre orientadas a fijar a mano el tamaño del widget y no funcionaba. Al final buscando por donde me has dicho ya me sale.

Esta es mi modificación sobre el ejercicio del ejemplo:

añado un miembro bool a la clase:

Código C++:
Ver original
  1. bool visible;

Añado un slot:
Código C++:
Ver original
  1. public slots:
  2.         void OcultarMostrar();

En el constructor conecto el botón de mostrar/ocultar al slot que he creado, y no al slot del widget que tiene la extensión. También pongo el tamaño "fixed", que es donde está la clave (gracias de nuevo!!) :

Código C++:
Ver original
  1. connect(moreButton, SIGNAL(toggled(bool)), this, SLOT(OcultarMostrar()));
  2. layout()->setSizeConstraint(QLayout::SetFixedSize );

Y finalmente esta es la implementación del slot:

Código C++:
Ver original
  1. void Extension::OcultarMostrar()
  2. {
  3.     visible = !visible;
  4.  
  5.     if (visible)
  6.     {
  7.         //extension->setVisible(visible);
  8.         moreButton->setText(tr("Menos"));
  9.         extension->show();
  10.     }
  11.     else
  12.     {
  13.         //extension->setVisible(visible);
  14.         moreButton->setText(tr("Mas"));
  15.         extension->hide();
  16.     }
  17. }

Aquí me entra una duda. La ayuda de qt ya dice que el método setExtension(QWidget*) que nombro en el primer post ya está marcado como en desuso. En su lugar recomiendan simplemente hacer uso del método show()/hide().
Sin embargo en el ejemplo hacen uso del método setVisible(bool)

En todo caso, ambas formas funcionan. ¿Sabes si hay alguna razón para usar una u otra?

Gracias, como siempre!!
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 02/04/2016, 14:19
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt. Extender diálogos

Si preguntas por:

Código C++:
Ver original
  1. extension->isVisible()

Te puedes librar de la variable visible que tienes por ahí molestando.

Cita:
Iniciado por dehm Ver Mensaje
Aquí me entra una duda. La ayuda de qt ya dice que el método setExtension(QWidget*) que nombro en el primer post ya está marcado como en desuso. En su lugar recomiendan simplemente hacer uso del método show()/hide().
Sin embargo en el ejemplo hacen uso del método setVisible(bool)

En todo caso, ambas formas funcionan. ¿Sabes si hay alguna razón para usar una u otra?
Si han marcado como deprecated una funcionalidad se entiende que en una versión más o menos próxima esa funcionalidad simplemente desaparecerá. La gracia de marcarla como deprecated es que permite a los grupos que usan esa funcionalidad disponer de tiempo para cambiar el código antes de que éste falle... si no les obligarías a trabajar con versiones obsoletas ya que actualizar esas librerías implicaría tener código que no compila.

Por otro lado, show y hide son métodos muy concretos... uno sirve para asegurarse de que el widget es visible y el otro para asegurarse de que el widget permanece oculto.

setVisible te permite establecer la visibilidad en función de una variable tuya que puede ser resultado de una operación completa... siempre quedará más limpio tener:

Código C++:
Ver original
  1. widget->setVisible(variable);

que

Código C++:
Ver original
  1. if( variable )
  2.   widget->show();
  3. else
  4.   widget->hide();

Pero claro, a veces simplemente sabemos que queremos mostrar el widget (u ocultarlo) en cuyo caso tenemos una función específica. Nuevamente resulta más limpio tener:

Código C++:
Ver original
  1. widget->show();

que

Código C++:
Ver original
  1. widget->setVisible(true);

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 02/04/2016 a las 17:20
  #6 (permalink)  
Antiguo 05/04/2016, 12:02
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Extender diálogos

Muchas gracias como siempre, eferion.
Lo marco como solucionado
__________________
Mi calculadora en Qt

Etiquetas: extender
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:59.