同样一段代码,在windows、arm麒麟服务器V10平台下可以实现透明窗口,在x86麒麟服务器v10上无法实现透明窗口,变成了背景为黑色的窗口,经过探索,发现是因为x86麒麟的mate桌面默认没用开启某些功能。
Qt帮助文档中关于透明窗口的说明:
X11: This feature relies on the use of an X server that supports ARGB visuals and a compositing window manager. X11(linux):此特性依赖于能提供支持ARGB视觉效果和复合式视窗管理的X服务的功能开启。
使用[static] bool QX11Info::isCompositingManagerRunning(int screen = -1)函数判断,发现x86麒麟下返回为false,arm麒麟下返回为true。
在x86麒麟下,使用gsettings set org.mate.Marco.general compositing-manager "true"开启mate桌面的compositing-manager复合管理器,再次调用isCompositingManagerRunning返回为true,之后x86麒麟下qt可以实现透明窗口。
麒麟下Qt实现透明窗口的代码为:
setAutoFillBackground(false);
setWindowOpacity(0);