Pregunta

(ver ediciones)

Estoy desarrollando un / C ++ de QT en GNOME.

La aplicación de una ventana principal y la ventana niño QListBox.

Estos dos ventanas se muestran como ventanas principales separadas cuando alt-tab lejos de la aplicación.

¿Cómo puedo hacerlo de modo que sólo se muestra una ventana cuando (o posterior al usuario) utiliza alt-tab?

Estoy adivinando este comportamiento viene porque una ventana principal no recorta la subventana - la subventana extiende el límite de la ventana principal. Gnome tiene mal comportamiento alt-tab para una serie de otras aplicaciones también, mostrando cuadros de diálogo modales por separado de las ventanas principales. Pero en el caso de mi aplicación, esto es muy molesto.

Estoy pensando que podría hacer una ventana transparente gigante que incluye tanto las ventanas existentes. Sin embargo, sería más agradable para encontrar una solución "limpia".

(la suposición más lógica es verdad que tiene algo que ver con banderas ventana He intentado todas las combinaciones razonables de las banderas que se me ocurrieron Se describen los tipos de ventana aquí )

Editar: La aplicación tiene una QWidget como su ventana principal (no QMainWindow), QListView está contenida en el objeto QWidget y creado por pasa por un punto a la ventana principal.  es de estilo con Qt :: Herramienta | Qt :: FramelessWindowHint.

Edit2: El estilo Qt :: X11BypassWindowManagerHint hace el trabajo para eliminar la ventana de la lista alt-tab. El problema es que también hace que la ventana "administrado" por lo que cubre las otras ventanas. Me manaully podía ocultar cada vez que pierde el foco - premio ahora para una mejor solución.

¿Fue útil?

Solución

Al crear una ventana para la ventana QListBox establece un indicador ventana Qt::Tool en su constructor o posterior con llamada a la función setWindowFlags. Aquí hay alguna fragmento de código (omití las cabeceras):

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QMainWindow mw;
    mw.show();
    QWidget toolWindow(&mw, Qt::Window|Qt::Tool);
    QHBoxLayout layout(&toolWindow);
    toolWindow.setLayout(&layout);
    QListView lv(&toolWindow);
    layout.addWidget(&lv);
    toolWindow.show();

    return app.exec();
}

He probado esto en mi Debian caja (Gnome 2.30, metaciudad 2.30.1) con el usuario recién creado sid: prueba de imagen en respuesta a la pregunta # 3553428.

Si esto no es lo que quería, a continuación, indique el nombre del software que funciona correctamente o que lo busque. Para ello xprop carrera en la ventana de terminal y haga clic en la ventana que le interesa. La salida contendrá banderas ventana. El único que les interesa es _NET_WM_WINDOW_TYPE(ATOM). (. Es decir que no figura en alt-tab) para la ventana de la herramienta esta bandera es:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL

Si la ventana con estas banderas no es una caja de herramientas ventana entonces algo está mal con su gestor de ventanas o que ha configurado personalmente tal comportamiento.

Otros consejos

Puede probar a mano con la herramienta wmctrl. Con "algo -b-r" puede modificar los argumentos de NET_WM a ella. Pruebe estas en [1].

Si esto funciona, puede añadirlos en la Xlib-Calls (Si se llega a conocer X11 Ventana Número de Qt. Estoy seguro de que eso es posible).

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top