使用Qt 5 Wayland QPA插件通过wl_surface设置窗口透明度

时间:2016-03-25 14:24:04

标签: qt5 qt5.5 wayland

我有三个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_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的句柄,我该如何直接更改透明度?

0 个答案:

没有答案