es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

QTCreator 5.0.2, ejecución paralela de dos ventanas, C++

Revisé las “preguntas” sugeridas sobre mi problema. Sin embargo, ninguna de ellas lo resuelve.

Programo dos ventanas. La segunda ventana se abre desde la primera ventana. Necesito activar ambas ventanas, sin embargo, para iniciar la primera ventana (MainWindow), uso:

 int main(int argc, char *argv[])
 {
     QApplication a(argc, argv);
     MainWindow w;
     w.setWindowModality(Qt::NonModal);
     return a.exec();
 }

Como se mencionó, la segunda ventana se inicia desde pushButton, que se encuentra en la primera ventana (MainWindow) de la misma manera.

 void MainWindow::on_pushButton_2_clicked()
 {
     Graphics gr;
     gr.setWindowModality(Qt::NonModal);
     gr.exec();
 }

Cambié la modalidad a NonModal, sin embargo, el problema persiste. Non-Modal significa: “La ventana no es modal y no bloquea la entrada a otras ventanas.” <- de la documentación. Según la documentación, se recomienda evitar el uso de .exec(). Las alternativas son .show() y open(), las cuales he intentado. Después de la modificación, la segunda ventana se cierra inmediatamente después de abrirse.

¿Tienes alguna idea de cómo solucionarlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, qt-creator y qdialog, puedo sugerir las siguientes soluciones para el problema mencionado:

    1. Utilice el mecanismo signal-slot para comunicar entre las dos ventanas. En este caso, cuando la segunda ventana se abra, emita una señal que indique la activación de ambas ventanas. Captura esta señal en la primera ventana y activa ambas ventanas.
    2. Utilice el método show() en lugar de exec() para iniciar la segunda ventana. Esto permitirá que ambas ventanas estén activas simultáneamente.

    3. Establezca la ventana secundaria como la ventana principal. Esto asegurará que la segunda ventana sea una hija de la primera ventana y así ambas ventanas estarán activas simultáneamente.

    4. Use el método setWindowState() para activar ambas ventanas. En este caso, establezca el estado de ambas ventanas como Qt::WindowActive.

    Espero que una de estas soluciones ayude a resolver el problema.

Comments are closed.