Domanda

(vedi modifiche)

sto sviluppando a / c ++ applicazione QT sotto gnome.

L'applicazione una finestra principale e finestra figlia QListBox.

Entrambe queste finestre appaiono come finestre principali separati quando ho alt-tab di distanza dall'applicazione.

Come posso fare in modo che solo una finestra è mostrata quando (o successivo l'utente) gli usi alt-tab?

Sono indovinando questo comportamento viene perché una finestra principale non ritaglia la finestra secondaria - la sottofinestra estende il limite della finestra principale. GNOME è cattivo comportamento alt-tab per un certo numero di altre applicazioni, che mostra le finestre di dialogo modale separatamente dalle finestre principali. Ma nel caso della mia app, questo è davvero fastidioso.

Sto pensando che potrei fare una finestra trasparente gigante che comprende entrambe le finestre esistenti. Ma sarebbe bello per trovare una soluzione "pulita".

(l'ipotesi più logica è, infatti, che ha qualcosa a che fare con le bandiere delle finestre Ho provato ogni ragionevole combinazione di bandiere potrei pensare ai tipi di finestre sono descritti qui )

Modifica: L'applicazione ha un QWidget come finestra principale (non QMainWindow), QListView è contenuto nell'oggetto QWidget e realizzato facendo passare un punto alla finestra principale.  è in stile con Qt :: strumento | Qt :: FramelessWindowHint.

Edit2: Lo stile Qt :: X11BypassWindowManagerHint ha il lavoro per rimuovere la finestra dalla lista alt-tab. Il problema è che rende anche la finestra "non gestito" in modo da coprire le altre finestre. Potrei manaully nascondere ogni volta che perdere la concentrazione - Premio adesso per una soluzione migliore.

È stato utile?

Soluzione

Quando si crea una finestra per la finestra QListBox impostato una finestra bandiera Qt::Tool nel suo costruttore o successiva con chiamata di funzione setWindowFlags. Ecco alcuni frammento di codice (ho omesso le intestazioni):

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();
}

Ho provato questo sulla mia Debian scatola (Gnome 2.30, metacity 2.30.1) con l'utente appena creato SID: prova di immagine sulla risposta alla domanda # 3553428.

Se questo non è quello che si voleva, quindi si prega di citarne il software che funziona correttamente o si può controllare voi stessi. Per fare questo xprop corsa nel finestra di terminale e cliccare sulla finestra che ti interessa. L'uscita conterrà le bandiere delle finestre. Quello che ci interessa è _NET_WM_WINDOW_TYPE(ATOM). (. Cioè non elencati in alt-tab) per la finestra dello strumento questo flag è:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL

Se la finestra con queste bandiere non è una finestra toolbox, allora c'è qualcosa che non va con il vostro gestore di finestre o si è personalmente impostare un comportamento del genere.

Altri suggerimenti

Si può provare a mano con lo strumento wmctrl. Con "qualcosa -b -r" è possibile modificare gli argomenti NET_WM ad esso. Prova questi in [1].

Se questo funziona, è possibile aggiungerli con Xlib-chiamate (Se si arriva a conoscere X11 Window Numero da Qt. Sono sicuro che tutto è possibile).

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top