4

我有三个使用 TI SDK 映像上的 Qt 5 Wayland 插件在 BeagleBone X-15 上独立运行的 Qt 5 应用程序。

当我启动它们时,它们会填满整个屏幕,以便启动的第一个应用程序被第二个覆盖,第二个应用程序被第三个覆盖。

如何修改启动的第二个和第三个应用程序的透明度,以便我可以看到启动的第一个应用程序的一些视图?

我尝试使用 Qt 修改窗口不透明度setWindowOpacity,但 Wayland 插件显示:“此插件不支持窗口不透明度。”</p>

Wayland 页面上的 Qt 5说:

Qt 5 由 Lighthouse(或 Qt 平台)抽象构成,它是窗口系统和设备无关的架构。这意味着 Qt 可以根据需要在运行时为不同的窗口系统加载不同的后端插件。例如,在 Qt 上开发的应用程序可以分别使用 XCB 或 Wayland 的“-platform xcb”和“-platform wayland”运行(或设置QT_QPA_PLATFORM环境变量),并且在两个系统上应该具有相似的行为,而无需重新编译.

Qt 抽象向应用程序开发人员公开了 Wayland 的两种原生资源:wl_displaywl_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,我怎样才能直接改变透明度?

4

0 回答 0