2009-08-05 7 views
5

¿Hay alguna manera de crear una ventana (como QDialog), sin un icono de ventana en la esquina superior izquierda? He intentado usar un ícono transparente pero deja un espacio en blanco allí.Qt cuadro de diálogo sin icono de ventana (menú del sistema)

Editar: La solución de richardwb a continuación elimina el menú del sistema, pero también elimina Minimizar/Maximizar/Cerrar (botones de título) también. Esto podría funcionar por el momento, pero es de esperar que haya una solución que preserve los botones de subtítulos.

+0

¿Qué sistema operativo? Seguramente será específico de la plataforma (si es posible). – rohanpm

+0

Oh, lo siento. Para Windows, pero con suerte existe una solución multiplataforma. – swongu

Respuesta

10

Si usted no necesita ningún botón de subtítulos en absoluto, se puede lograr esto mediante el establecimiento de alguna window flag hints:

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

aplicación de demostración de Qt tiene una aplicación de ejemplo que le permite experimentar con estas banderas (Qt Demostración -> Widgets-> Window Flags) si quieres ver qué hacen las diferentes combinaciones.


Por otro lado, si desea cualquiera de los botones Cerrar Minimizar/Maximizar /, se dará cuenta de Qt obliga al menú del sistema y el icono de la ventana a aparecer. Creo que esto es generalizar un poco las plataformas, ya que es muy fácil encontrar ejemplos de diálogos nativos de Windows con un botón Cerrar pero sin el menú del sistema y el icono de la ventana.

En ese caso, necesitará un código específico de Windows, similar a esto (no probado):

#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 

Editar: Como se ha comentado por swongu, esto sólo funciona si usted quiere tener un botón de cierre sin menu del sistema. Si quiere un botón para minimizar/maximizar pero no tiene un menú del sistema, no tiene suerte.

+0

Gracias por esta idea. Desafortunadamente, su fragmento de código de Windows funciona como el caso de Qt: una vez que el menú del sistema desaparece, también lo hacen los botones de leyenda. MSDN establece que 'WS_MAXIMIZEBOX' y' WS_MINIMIZEBOX' requieren que se levante 'WS_SYSMENU'. – swongu

+0

Sí, lo hacen. Sin embargo, puede salirse con la suya teniendo un botón de cierre en el título. Lo aclararé. – richardwb

+0

Solo quiero el botón Cerrar (sin menú del sistema, sin maximizar/minimizar), pero esto no funciona para mí. El botón de cerrar desaparece también. Establecí las banderas de la ventana de Qt en Qt :: Dialog | Qt :: CustomizeWindowHint | Qt :: WindowTitleHint | Qt :: WindowCloseButtonHint. –

Cuestiones relacionadas