Sembra piuttosto un vecchio argomento. Tuttavia, non ho visto nessuno pubblicare una risposta adeguata che funzioni, quindi sto postando la mia soluzione allo stesso problema che ho dovuto affrontare di recente.
Prima di tutto, se si desidera che la finestra di dialogo non rubi lo stato attivo da altre finestre di dialogo o campi di input, è necessario impostare la seguente proprietà: Qt :: WA_ShowWithoutActivating. Usando questa proprietà, la finestra (finestra di dialogo è anche una finestra) verrà mostrata senza essere attivata. Quindi, probabilmente vorrai personalizzare la finestra di dialogo in base alle tue esigenze e vorrai che questa finestra di dialogo sia mostrata sopra. Pertanto, è possibile impostare i seguenti flag Finestra per ottenere tale risultato in modo multipiattaforma: Qt :: FramelessWindowHint | Qt :: NoDropShadowWindowHint | Qt :: X11BypassWindowManagerHint | Qt :: Tool | Qt :: WindowStaysOnTopHint | Qt :: WindowTransparentForInput | Qt :: WindowDoesNotAcceptFocus.
Il seguente codice è uno degli esempi di realizzare una finestra che è modale, e non ruba fuoco da chiunque (supponendo finestra è una variabile che punta alla un'istanza valida di 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);
fonte
2018-02-26 08:56:01
Correggetemi se sbaglio, ma questo fa sì che la finestra operi indipendentemente dal suo genitore. Ancora non rimarrà in cima quando l'utente ALT + TAB. – Pieter
Un QDialog è una finestra di livello superiore. Puoi usare la funzione 'raise' se vuoi assicurarti che sia in cima allo stack del widget genitore. Usando 'mostra', la finestra di dialogo sarà visibile e sarai in grado di interagire con le altre finestre dell'applicazione. Se si desidera rendere visibile la finestra di dialogo in tutta l'applicazione, è possibile impostare la finestra principale come principale. Non sono sicuro di cosa succede con i TAB di ALT + – pnezis
Quando l'utente preme ALT + TAB (o concentra l'attenzione su una finestra a schermo intero), QDialog non è più in cima ad altre finestre. Questo non è il comportamento desiderato per una notifica [MSN Messenger-like] (http://www.donkhuth.com/wp-content/uploads/2007/01/saosang.jpg) come quella che sto cercando di ottenere. – Pieter