Mostra finestra in Qt senza rubare messa a fuoco
-
12-09-2019 - |
Domanda
Sto utilizzando la libreria Qt per mostrare una presentazione sul secondo monitor quando l'utente non utilizza il secondo monitor. Un esempio è l'utente a giocare un gioco nel primo monitor e mostrando la presentazione nel secondo monitor.
Il problema è che quando apro una nuova finestra in Qt, ruba automaticamente il focus dall'applicazione precedente. C'è un modo per evitare che ciò accada?
Soluzione
Mi c'è voluto un po 'a trovarlo, ma ho trovato: setAttribute(Qt::WA_ShowWithoutActivating);
In questo modo la finestra non attivare. Anche con la bandiera Qt::WindowStaysOnTopHint
Altri suggerimenti
Se si vuole fare in casella di anteprima galleggiante / qualsiasi altro widget basta usare seguente
thumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
Qt :: Tool è importante bandiera per farlo funzionare. Non intendo rubare messa a fuoco.
Widget non accettano di messa a fuoco di default, ma presumibilmente non hanno creato un widget pianura? Quale sottoclasse era? QMainWindow o qualcos'altro?
E 'possibile il default sottoclassi finestra per accettare attenzione in modo da provare in modo esplicito chiamando QWidget :: setFocusPolicy con Qt :: Non in primo piano prima di chiamare QWidget :: show ().
Inoltre, assicurarsi che non stai chiamando QWidget :: activateWindow () sulla finestra o uno qualsiasi dei suoi widget in qualsiasi punto.