Zeigen Sie Fenster in Qt, ohne den Fokus zu stehlen
-
12-09-2019 - |
Frage
Ich bin mit der Qt-Bibliothek eine Diashow auf dem zweiten Monitor angezeigt wird, wenn der Benutzer den zweiten Monitor nicht verwendet wird. Ein Beispiel hierfür ist der Benutzer ein Spiel in dem ersten Monitor zu spielen und die Diashow im zweiten Monitor zeigt.
Das Problem ist, dass, wenn ich ein neues Fenster in Qt öffnen, wird es automatisch den Fokus von der früheren Anmeldung stiehlt. Gibt es eine Möglichkeit, dies zu verhindern?
Lösung
Es dauerte eine Weile, um es zu finden, aber ich fand es: setAttribute(Qt::WA_ShowWithoutActivating);
Dies zwingt das Fenster nicht zu aktivieren. Auch mit der Qt::WindowStaysOnTopHint
Fahne
Andere Tipps
Wenn Sie Floating Vorschaufeld machen wollen / andere Widget unterhalb
verwenden nurthumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
Qt :: Tool ist wichtig Flag es funktioniert. Ich meine nicht den Fokus zu stehlen.
Widgets nicht akzeptiert Fokus standardmäßig aber vermutlich haben Sie nicht ein einfaches Widget erstellt? Welche Unterklasse war es? QMainWindow oder etwas anderes?
Es ist möglich, das Fenster Subklassen Standardfokus so versucht Aufruf explizit QWidget :: setFocusPolicy mit Qt :: NoFocus vor dem Aufruf von QWidget :: show ().
zu akzeptierenAlso, stellen Sie sicher, dass Sie nicht QWidget :: activateWindow () auf dem Fenster oder eine ihrer Widgets an jedem beliebigen Punkt aufrufen.