2009-08-05 14 views
5

C'è un modo per creare una finestra (ad esempio QDialog), senza l'icona di una finestra nell'angolo in alto a sinistra? Ho provato a utilizzare un'icona trasparente ma lascia uno spazio vuoto lì.Finestra di dialogo Qt senza icona finestra (menu di sistema)

Modifica: La soluzione di richardwb in basso rimuove il menu di sistema, ma rimuove anche Riduci/Ingrandisci/Chiudi (pulsanti didascalia). Questo potrebbe fare per ora, ma si spera che ci sia una soluzione che conserva i pulsanti delle didascalie.

+0

Quale sistema operativo? Sarà sicuramente specifico per la piattaforma (se possibile). – rohanpm

+0

Oh, mi dispiace. Per Windows, ma si spera che esista una soluzione multipiattaforma. – swongu

risposta

10

Se non avete bisogno di alcun pulsante didascalia a tutti, è possibile raggiungere questo impostando alcuni window flag hints:

setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint); 

applicazione Demo di Qt ha un'applicazione di esempio che consente di sperimentare con queste bandiere (Qt Demo -> Widget-> Window Flags) se vuoi vedere cosa fanno le diverse combinazioni.


D'altra parte, se si desidera che una qualsiasi delle Riduzione/ingrandimento/Chiudi pulsanti, si noterà Qt costringe il menu di sistema e l'icona la finestra a vedere. Penso che sia Qt a generalizzare le piattaforme un po ', perché è molto facile trovare esempi di dialoghi nativi di Windows con a pulsante Chiudi ma senza il menu di sistema e l'icona della finestra.

In questo caso, avrete bisogno di un po 'di codice di Windows specifica, simile a questo (non testato):

#if defined(Q_WS_WIN) 
    // don't forget to #include <windows.h> 
    HWND hwnd = winId(); 
    LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE); 
    style &= ~WS_SYSMENU; // unset the system menu flag 
    SetWindowLongPtr(hwnd, GWL_STYLE, style); 
    // force Windows to refresh some cached window styles 
    SetWindowPos(hwnd, 0, 0, 0, 0, 0, 
     SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); 
#endif 

Edit: Come commentato da swongu, questo funziona solo se si vuole avere un pulsante di chiusura senza menu di sistema. Se vuoi un pulsante minimizza/massimizza ma nessun menu di sistema, sei sfortunato.

+0

Grazie per questa idea. Sfortunatamente, lo snippet di codice di Windows funziona come il caso Qt: una volta scomparso il menu di sistema, lo stesso vale per i pulsanti didascalia. MSDN afferma che 'WS_MAXIMIZEBOX' e' WS_MINIMIZEBOX' richiedono che venga generato 'WS_SYSMENU'. – swongu

+0

Sì, lo fanno. Tuttavia, puoi farla franca con un pulsante di chiusura sulla didascalia. Lo chiarirò. – richardwb

+0

Voglio solo il pulsante di chiusura (nessun menu di sistema, no ingrandire/ridurre a icona), ma questo non funziona per me. Anche il pulsante di chiusura scompare. Ho impostato i flag della finestra Qt su Qt :: Dialog | Qt :: CustomizeWindowHint | Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint. –

Problemi correlati