我有三个使用 TI SDK 映像上的 Qt 5 Wayland 插件在 BeagleBone X-15 上独立运行的 Qt 5 应用程序。
当我启动它们时,它们会填满整个屏幕,以便启动的第一个应用程序被第二个覆盖,第二个应用程序被第三个覆盖。
如何修改启动的第二个和第三个应用程序的透明度,以便我可以看到启动的第一个应用程序的一些视图?
我尝试使用 Qt 修改窗口不透明度setWindowOpacity
,但 Wayland 插件显示:“此插件不支持窗口不透明度。”</p>
Qt 5 由 Lighthouse(或 Qt 平台)抽象构成,它是窗口系统和设备无关的架构。这意味着 Qt 可以根据需要在运行时为不同的窗口系统加载不同的后端插件。例如,在 Qt 上开发的应用程序可以分别使用 XCB 或 Wayland 的“-platform xcb”和“-platform 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
,我怎样才能直接改变透明度?