2011-03-28 10 views
6

Me pregunto si es posible capturar un evento que se genera cuando todos los objetos Qt se inicializan y están listos?Qt cómo capturar el evento que indica que todos los elementos de la GUI están listos

Parece que algunas cosas no se pueden hacer en el constructor de la ventana. Y funcionan bien en la implementación de tragamonedas.

Por ejemplo, cuando quiero acceder a la ventana raíz de mi solicitud lo hago de esa manera

// in *.h 
MainWindow* rootWindow 

// in *.cpp 
rootWindow = qobject_cast<MainWindow *>(this->window()); 

Si se hace en el contructor no puedo utilizar el objeto rootWindow - que couses error de ejecución.

No hay ranura relevante para implementar. Y crear evento en la clase QMainWindow no es virtual.

Gracias por la ayuda :)

+0

¿A qué le atribuyes tu widget? – Eugene

+0

Es mi clase de ventana principal basada en QMainWindow. Es una propiedad de la clase actual que es un elemento secundario de la ventana principal. –

Respuesta

9

Puede utilizar un temporizador de disparo único para este. En su clase de ventana principal, defina una función de ranura llamada, por ejemplo, appReady(). En el constructor, cree y conecte un temporizador de disparo único usando QTimer::singleShot(0, this, SLOT(appReady())); Este temporizador debe dispararse tan pronto como el ciclo de evento esté activo y no haya más eventos de inicio pendientes.

+0

Eso es lo que necesitaba :) Gracias. –

0

¿Cómo puede estar seguro de que la ventana raíz es de hecho MainWindow? Más adelante en la vida del proyecto, puede alimentar su widget a un elemento primario diferente (por ejemplo, algunas capas de decoraciones de QFrame para fines de diseño) y este código fallará.

Pásalo como un parámetro explícito en el constructor.

A menos que sea MainWindows todo el camino :)

+0

Mis formularios son compilados usando el diseñador de gui en QtCreator. No creo que pueda cambiar la forma en que se crean los objetos. Con el mecanismo de promoción al pienso, creo que es imposible. –

Cuestiones relacionadas