2016-03-25 7 views
3

I drei Qt 5 Anwendungen hat, das unabhängig auf der BeagleBone X-15 mit der Qt 5 Wayland Plugin auf dem TI SDK Bild gut funktionieren.Verwenden Qt 5 Wayland QPA Plugin einzustellen Fenstertransparenz mit wl_surface

Als ich sie starten, füllen sie den gesamten Bildschirm, so dass die erste App ins Leben gerufen von der zweiten bedeckt ist, und die zweite Anwendung durch die dritte bedeckt ist.

Wie kann ich die Transparenz des zweiten und dritten App gestartet ändern, so dass ich einige der Ansicht von der ersten App gestartet sehen kann?

Ich habe versucht, das Fenster Opazität mit Qt setWindowOpacity, aber das Wayland Plugin sagt ändern: „Fenster Opazität dieses Plugin nicht unterstützt“

Qt 5 on Wayland Seite sagt:

Qt 5 mit der strukturiert ist, Lighthouse (oder Qt Platform) Abstraction, das ist das Windowing-System und Gerät Agnostic-Architektur. Das bedeutet, dass Qt in der Laufzeit verschiedene Backend-Plugins für verschiedene Fenstersysteme laden kann. Zum Beispiel könnte eine auf Qt entwickelte Anwendung mit "-platform xcb" und "-platform wayland" für XCB bzw. Wayland ausgeführt werden (oder die Umgebungsvariable QT_QPA_PLATFORM setzen) und sollte auf beiden Systemen ein ähnliches Verhalten haben, ohne dass dies erforderlich ist neu kompilieren.

Die Qt-Abstraktion stellt den Anwendungsentwicklern zwei native Ressourcen von Wayland zur Verfügung: wl_display und wl_surface. Mit diesen Typen könnte man Wayland Einbauten Zugang mit Sonderfällen durch die Schnittstelle zu behandeln:

void *QPlatformNativeInterface::nativeResourceForWindow(const QByteArray &resource, QWindow *window) 

Erste das Display globalen Handler ist recht einfach, wie im folgenden Beispiel gezeigt:

QPlatformNativeInterface *native = 
    QGuiApplication::platformNativeInterface(); 
struct wl_display *wl_dpy = (struct wl_display *) 
    native->nativeResourceForWindow("display", NULL); 

und für wl_surface:

QPlatformNativeInterface *native = 
    QGuiApplication::platformNativeInterface(); 
struct wl_surface *surface = static_cast<struct wl_surface *>(
    native->nativeResourceForWindow("surface", this->windowHandle())); 

Wenn ich den Griff zu diesem wl_surface , wie kann ich die Transparenz direkt ändern?

Antwort

0

Die Transparenz Implementierung hängt von vielen Faktoren in QtWayland, wie die folgenden.

1) das Format der wl_shm angebracht suppport Alphakanal wl_surface.

2) Im Protokoll ist die Anforderung zum Angeben der Transparenz definiert.

3) der Setzer (üblicherweise Weston) implementiert Rendering Alphakanal zu unterstützen.

Es gibt nicht genügend Implementierungsdetails für Ihre Frage, aber Sie können Ihre Wayland-Protokoll- und Compositor-Implementierung überprüfen, um herauszufinden, wie Sie diese beheben können.