Frage

(siehe Änderungen)

Ich entwickle eine QT / c ++ Anwendung unter Gnom.

Die Anwendung ein Hauptfenster und QListBox Kind Fenster.

Diese beiden Fenster erscheinen als separates Hauptfenster, wenn ich Alt-Tab weg von der Anwendung ab.

Wie kann ich es machen, so dass nur ein Fenster angezeigt, wenn ich (oder der Benutzer später) Alt-Tab verwendet?

ich dieses Verhalten bin zu raten kommt, weil ein Hauptfenster nicht das Unterfenster nicht Clip - die Subwindow erstreckt sich die Grenze des Hauptfensters. Gnome hat schlechtes Alt-Tab-Verhalten für eine Reihe anderer Anwendungen zu, zeigt modale Dialogfelder getrennt von Hauptfenster. Aber im Fall von meiner app, das ist wirklich ärgerlich.

Ich denke, ich könnte ein riesiges transparentes Fenster machen, die beiden vorhandenen Fenster enthalten. Aber es wäre schöner, eine „saubere“ Lösung zu finden.

(die logischste Vermutung ist, in der Tat, dass es etwas mit Fenstern Fahnen zu tun hat ich jede sinnvolle Kombination von Fahnen versucht habe ich einfiel Die Fenstertypen beschrieben werden hier )

Edit: Die Anwendung hat ein QWidget als Hauptfenster (nicht QMainWindow), QListView ist im QWidget Objekt enthalten sind, und erzeugt durch einen Punkt zu dem Hauptfenster vorbei.  mit Qt :: Werkzeug gestylt | Qt :: FramelessWindowHint.

Edit2: Die Qt :: X11BypassWindowManagerHint Stil funktioniert Arbeit das Fenster aus der Alt-Tab-Liste entfernen. Das Problem ist, dass es macht auch das Fenster „unmanaged“, so dass es die anderen Fenster abzudecken. Ich konnte manaully verstecken, wenn ich verlieren Fokus - Preis nun für eine bessere Lösung.

War es hilfreich?

Lösung

Wenn Sie nach Ihrem QListBox Fenster Erstellen ein Fenster gesetzt eine Qt::Tool Fenster Flagge in seinem Konstruktor oder später mit setWindowFlags Funktionsaufruf. Hier ist ein Code-Schnipsel (I weggelassen die Header):

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

Ich habe getestet auf meinem Debian sid Box (Gnome 2.30, metacity 2.30.1) mit frisch erstellten Benutzer: „Bild.

Wenn dies nicht das, was Sie wollen, nennen Sie bitte die Software, die ordnungsgemäß funktioniert oder Sie können es selbst überprüfen. Dazu klicken diesen Lauf xprop in Terminal-Fenster und auf dem Fenster, das Sie interessiert. Die Ausgabe Fenster Flags enthalten. Diejenige, die Sie interessiert, ist _NET_WM_WINDOW_TYPE(ATOM). (D. H nicht in Alt-Tab aufgelistet) für die Tool-Fenster dieses Flag ist:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL

Wenn das Fenster mit dieser Flags kein Toolbox Fenster ist, dann ist etwas falsch mit Ihrem Fenstermanager oder Sie haben persönlich ein solches Verhalten gesetzt.

Andere Tipps

Sie können es von Hand versuchen, mit dem wmctrl Werkzeug. Mit „-r -b ETWAS“ können Sie NET_WM Argumente, um es ändern. Versuchen Sie, diese in [1].

Wenn dies funktioniert, können Sie sie hinzufügen, mit Xlib-Calls (Wenn Sie X11 Fenster Anzahl von Qt kennen zu lernen. Ich bin sicher, dass das möglich ist).

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top