void MainWindow::on_actionAlways_on_Top_triggered(bool checked)
{
Qt::WindowFlags flags = this->windowFlags();
if (checked)
{
this->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
this->show();
}
else
{
this->setWindowFlags(flags^(Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint));
this->show();
}
}
La soluzione di cui sopra funziona ma poiché setWindowFlags nasconde la finestra, deve essere nuovamente visualizzata e, naturalmente, non sembra molto elegante. Quindi, come faccio a passare "sempre in primo piano" per una QMainWindow senza quell'effetto collaterale "lampeggiante"?Come si imposta "sempre in primo piano" per QMainWindow in Qt senza causare uno sfarfallio o un flash?
+1: per la bella idea di "soluzione";) – ereOn
Per una funzione "sempre in primo piano", ciò deve essere possibile. Un sacco di applicazioni lo fanno senza sfarfallio; forse ho solo bisogno di utilizzare alcune funzioni native di Windows? –
Se vuoi andare al di sotto o scavalcare l'implementazione Qt (di distruggere la finestra e farlo di nuovo) allora forse. Ma almeno alcune di queste cose sono proprietà del IIRC "Window Class" e non dell'HWND; e potresti non essere in grado di cambiare la classe di una finestra dopo che è stata creata. Ad ogni modo, penso che il valore di fornire una risposta che puoi accettare senza rompere il livello di astrazione Qt è meglio che essere impantanati in hack di Win32. Questa è la gioia di Qt in primo luogo ... – HostileFork