Qt 5.2.1 Ayuda con la visualizacion de las ventanas



  • Hola a todos.

    soy nuevo con Qt y necesito ayuda con una duda.
    Tengo una aplicación con 2 Form. Cuando clico el boton y hago form2.show(); este se puede abrir tantas veces como clicks haga. Quiero que si esta cerrado u oculto solo se pueda abrir (show) una vez.

    Solucionado.

    @if(w_info->isHidden()){
    w_info->show();

        }else{
            w_info->hide();
    

    }@



  • Hola

    No entendí muy bien qué quieres hacer.

    ¿Tienes una ventana y quieres comprobar, antes de volver a abrirla, si ya está abierta, y si no lo está, abirla?

    ¿O quieres que al pulsar, por ejemplo un botón, se abra una nueva ventana y así tener varias abiertas?

    Saludos



  • Básicamente quiero que al apretar el boton solo se abra una ventana. si esta oculto o cerado se muestre si no no.



  • Hola

    Entonces la primera ves que pulses el botón tendrás que crear la ventana y las siguientes solo mostrarla.

    He probado un ejemplo y parece que funciona.
    En el archivo .h defines un puntero a la ventana que vas a abrir, luego en el constructor lo inicializas a NULL.

    Ahora, cuando se pulse el botón hay que comprobar si está a NULL para crearla o solo mostrarla, algo así:

    @ if(dialog == NULL)
    dialog = new Dialog(this);

    dialog->exec();
    

    @

    Según he probado, cuando se cierra el diálogo no se destruye, solo se oculta, por lo que el código funciona.

    Si quieres que la ventana se destruya cuando se cierra hay que usar el atributo Qt::WA_DeleteOnClose, he probado y funciona, pero plantea un problema y es que aunque se destrueye la ventana, el puntero no vale NULL, por lo que la siguiente vez el if da false y no se crea la ventana, por lo que obtenemos un bonito crash.

    Así que para solucionarlo conecté la señal destroyed con un SLOT en el que poner al NULL el puntero y parece que funciona.

    Prueba a ver si es lo que quieres y si funciona bien.

    Saludos



  • Hola. Gracias por tu ayuda. Al fina he podido solucionarlo.



  • bueno seria algo asi.

    dialog->setModal(true)
    dialog->exec().

    el la doc esta setmodal() creo que esto te puede servir, yo asi lo hago.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.