Parece un tema bastante viejo. Sin embargo, no vi a nadie publicar una respuesta adecuada que simplemente funciona, por lo que estoy publicando mi solución al mismo problema al que me he enfrentado recientemente.
En primer lugar, si usted quiere que su diálogo no robar el foco de otros cuadros de diálogo o campos de entrada, se debe establecer la siguiente propiedad: Qt :: WA_ShowWithoutActivating. Usando esta propiedad, la ventana (el diálogo también es una ventana) se mostrará sin estar activado. Entonces, probablemente querrás personalizar tu diálogo según tus necesidades, y querrás que este diálogo se muestre en la parte superior. Por lo tanto, se pueden establecer los siguientes indicadores de Ventana para lograr dicho resultado de forma multiplataforma: Qt :: FramelessWindowHint | Qt :: NoDropShadowWindowHint | Qt :: X11BypassWindowManagerHint | Qt :: Herramienta | Qt :: WindowStaysOnTopHint | Qt :: WindowTransparentForInput | Qt :: WindowDoesNotAcceptFocus.
El código siguiente es uno de los ejemplos para lograr un diálogo que es modal, y no se roba el foco de cualquier persona (suponiendo de diálogo es una variable apuntando a la instancia válida de QDialog):
dialog->setAttribute(Qt::WA_ShowWithoutActivating, true);
dialog->setWindowFlags(dialog.windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::X11BypassWindowManagerHint | Qt::Tool | Qt::WindowStaysOnTopHint | Qt::WindowTransparentForInput | Qt::WindowDoesNotAcceptFocus);
Corrígeme si me equivoco, pero esto solo hace que la ventana funcione independientemente de su padre. Todavía no se mantendrá en la parte superior cuando el usuario ALT + TAB. – Pieter
Un QDialog es una ventana de nivel superior. Puede usar la función 'raise' si quiere asegurarse de que estará encima de la pila del widget padre. Usando 'show', el diálogo estará visible y podrá interactuar con las otras ventanas de la aplicación. Si desea que el diálogo sea visible en toda la aplicación, puede configurar la ventana principal como principal. No estoy seguro de qué sucede con las ALT + TABs – pnezis
Cuando el usuario presiona ALT + TAB (o le da enfoque a una ventana de pantalla completa), QDialog ya no se encuentra en la parte superior de otras ventanas. Este no es el comportamiento deseado para una notificación [similar a MSN Messenger] (http://www.donkhuth.com/wp-content/uploads/2007/01/saosang.jpg) como la que intento lograr. – Pieter