instalar full creator compiler windows winapi qt

full - Es necesario llevar la aplicación a primer plano en Windows



qt windows requirements (6)

Creo que las API que necesitas son AllowSetForegroundWindow () y SetForegroundWindow () . No sé cuáles son las llamadas Qt equivalentes.

Tengo dos aplicaciones que estoy desarrollando usando Qt en Windows. Quiero que el usuario pueda presionar un botón en una aplicación, lo que hace que la otra aplicación aparezca en primer plano. (Los programas se comunican usando QLocalSocket y pipes nombrados).

Actualmente uso Qt''s QWidget :: activateWindow () que ocasionalmente lleva la aplicación al primer plano, pero la mayoría de las veces solo resalta el programa en la barra de tareas.

¿Puede alguien decirme cómo hacer esto, de preferencia usando Qt aunque fallar que usar la API WIN32 estaría bien?

Desafortunadamente, no pude encontrar una manera de hacer esto solo con Qt. Lo resolví usando la sugerencia de Chris Becke de llamar a SetForegroundWindow desde la aplicación actualmente activa.


¿Estás seguro de que esto no es un problema de depuración? El trato es, si una aplicación TIENE el primer plano, se permite cambiar el primer plano.

Al hacer clic en un botón en la ventana A, se activará la activación de primer plano del hilo de Windows. Si llama a SetForegroundWindow (o equivalente) en la otra ventana, esa ventana se dará el primer plano.

Si, por otro lado, simplemente envía un mensaje a la otra aplicación, que intenta SetForeground en sí mismo, eso fallará. AllowSetForegroundWindow se usa en situaciones en las que una aplicación ''heredada'' necesita permiso, por una aplicación en primer plano, para tomar el primer plano. Una vez más, AllowSet ... solo funciona si se llama desde un hilo que posee la ventana de primer plano activa actual.


Además del método QWidget::activateWindow , debes llamar a QWidget::raise !

Esto es lo que se dice aquí .


Esto es cursi, pero funciona para mí:

this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); this->show(); this->setWindowFlags(Qt::FramelessWindowHint); this->show();

O, si no tiene otras banderas,

this->setWindowFlags(Qt::WindowStaysOnTopHint); this->show(); this->setWindowFlags(0); this->show();

WindowStaysOnTopHint casi siempre forzará la ventana al primer plano. Después, realmente no desea que la ventana siempre permanezca en la parte superior, por lo que debe reiniciar a los indicadores anteriores.


Tengo un caso similar.

Tengo dos aplicaciones Qt, A y B, que se comunican en un socket. Me gustaría mostrar una ventana de la aplicación B, a través de un botón en la aplicación A.

Descubrí que a veces el estado del widget no está configurado correctamente, así que en la función event() del widget de mi aplicación B hice lo siguiente:

bool MyWidgetB:event ( QEvent * e ) { QEvent::Type type = e->type (); // Somehow the correct state of window is not getting set, // so doing it manually if( e->type() == QEvent::Hide) { this->setWindowState(WindowMinimized); } else if( e->type() == QEvent::Show ) { this->setWindowState((this->windowState() & ~WindowMinimized) | WindowActive); } return QWidget::event(e); }

Estoy enviando un comando de la aplicación A a la B. Al recibirlo, la aplicación B llama a la siguiente función en sí misma:

void BringUpWidget(QWidget* pWidget) { pWidget ->showMinimized(); // This is to bring up the window if not minimized // but beneath some other window pWidget ->setWindowState(Qt::WindowActive); pWidget ->showNormal(); }

Esto funciona para mí, en Windows XP , con Qt 3.3. Mi MainWidget se deriva de un QWidget .

Descubrí que esto también funciona con un widget derivado de QMainWindow , pero con algunos problemas. Como si otras ventanas secundarias están abiertas.

Para tal caso, BringUpWidget la posición de las ventanas secundarias y las escondo, luego uso la función BringUpWidget para traer mi widgets MainWindow y luego restaurar las ventanas secundarias.


Use showNormal () para pasar de un estado iconificado a un estado visible.