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
undwl_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?