我有三个Qt 5应用程序在BeagleBone X-15上使用TI SDK映像上的Qt 5 Wayland插件独立工作。
当我启动它们时,它们会填满整个屏幕,以便第二个应用程序覆盖第二个应用程序,第二个应用程序由第三个应用程序覆盖。
如何修改已启动的第二个和第三个应用的透明度,以便我可以看到第一个应用推出的部分视图?
我尝试使用Qt的setWindowOpacity
修改窗口不透明度,但Wayland插件说:“此插件不支持Window Opacity。”
Qt 5 on Wayland页面说:
Qt 5采用Lighthouse(或Qt平台)抽象结构,这是一个窗口系统和设备无关的架构。这意味着Qt可以根据需要在运行时加载不同窗口系统的不同后端插件。例如,在Qt上开发的应用程序可以使用" -platform xcb"和#34; -platform wayland"分别用于XCB或Wayland(或设置
QT_QPA_PLATFORM
环境变量),并且在两个系统上都应该具有类似的行为,而无需重新编译。Qt抽象向应用程序开发人员公开Wayland的两个本地资源:
wl_display
和wl_surface
。使用这些类型,可以通过界面访问Wayland内部处理特殊情况:void *QPlatformNativeInterface::nativeResourceForWindow(const QByteArray &resource, QWindow *window)
获取显示全局处理程序非常简单,如以下示例所示:
QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); struct wl_display *wl_dpy = (struct wl_display *) native->nativeResourceForWindow("display", NULL);
和
wl_surface
:QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); struct wl_surface *surface = static_cast<struct wl_surface *>( native->nativeResourceForWindow("surface", this->windowHandle()));
如果我获得此wl_surface
的句柄,我该如何直接更改透明度?