Pregunta

En Qt tengo 2 formularios que dicen FirstUI y SecondUI.El principal abre FirstUI.Aquí verifico si las bases de datos necesarias para la aplicación están presentes y, si no están presentes, creo una nueva.También verifica si hay detalles de la red wifi almacenados en la base de datos.Si hay detalles del último wifi conectado, la aplicación busca redes disponibles y se conecta a la red wifi utilizando los detalles de la base de datos.

Ahora, si no hay detalles de wifi en la base de datos o si la red que figura en la base de datos no está presente o si la aplicación no pudo conectarse a la red wifi, emitirá una señal WifiNotConnected();

He conectado la señal a una ranura que abre la SecondUI.

connect(this,SIGNAL(WifiNotConnected()),this,SLOT(OpenSecondUI()));
.....

void FirstUI::OpenSecondUI()
{
   SecondUI *sec = new SecondUI();
   this->close();
   sec->show();
}

La SecondUI se abre, pero esto no cierra la FirstUI.

EDITAR:Si los detalles de wifi están presentes, tengo una clase (WifiBoot) que hereda QObject y realiza las tareas de conexión por mí.Como quiero que el archivo GIF se reproduzca en la GUI y que la conexión se produzca al mismo tiempo, he creado una instancia de la clase (WifiBoot) que realiza la conexión wifi y la moví a otro hilo.Después de conectar el wifi, emito la señal terminada que se conecta a la ranura para abrir la SecondUI

connect(worker,SIGNAL(finished()),this,SLOT(FinishedConnection()));

void FirstUI::FinishedConnection()
{
   OpenSecondUI();
}

Aquí cierra FirstUI y abre SecondUI.Pero en el primer caso no es así.¿Por qué está pasando esto?¿Existe una mejor manera de hacerlo?Cualquier ayuda es apreciada

¿Fue útil?

Solución 2

El OpenSecondui () fue llamado en el propio constructor.Por lo tanto, se llevó a cabo el cierre () en OpenSecondui () antes de que la UI estuviera en funcionamiento.Para resolver esto, como se sugiere en el Foro QT y en @ Andrea.Marangoni, sugerencia de que el constructor esté demasiado poblado, usé un temporizador de un solo disparo y moví el código completo en el constructor a una ranura y se llama la ranura después de un cierto retraso.Esto aseguró que antes de que se llamara a la ranura OpenSecondui (), la UI estaba en funcionamiento.

Otros consejos

primero comprueba si

this->close();

devuelve verdadero.la otra cosa podría ser simplemente ocultarlo usando

QWidget::hide()

así como establecer el FirstUI como padre del SecondUI para que su aplicación no pierda memoria SI tiene varias instancias de FirstUI.(Olvídate de lo de los padres si todavía close() el widget)

salud

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top