当x11窗口作为Qwidget的父母时,无法应用x11的透明背景

时间:2019-05-20 05:52:56

标签: c++ embedded x11 transparent qt5.8

首先,我使用QWidget :: createWindowContainer(QQuickView,QWidget)制作小部件容器。 其次,我制作透明的x11窗口。 (XCreateWindow)

当我创建父级为DefaultRootwindow的x11窗口时,x11窗口完全透明。 但是,当我将此x11窗口设置为QWidet时,透明度不起作用。 背景颜色为黑色。

另外,当我将x11窗口的背景色设置为其他颜色(例如红色,粉红色,黄色)时,它会完美显示出来,但是不透明度不起作用。

我认为当我将x11窗口的父级设置为Qwidget时, 仅透明区域填充有blackpixel。

我想使x11窗口透明,并想在QWidget内容区域下查看。 你知道我该如何解决这个问题? 为什么x11透明区域成为黑色像素区域?那一层是什么?

[示例代码]

ParentWidget = QWidget::createWindowContainer(QWindow window, QWidget parent);

p_window = window->winId();
XColor color, color_exact;
Colormap colormap;
unsigned int transparent;

colormap = DefaultColormap(xdisplay, 0);
XAllocNamedColor(xdisplay, colormap, "transparent", &color, &color_exact);
transparent = color.pixel;

XVisualInfo vInfo;
XSetWindowAttributes attr;

XMatchVisualInfo(xdisplay, DefaultScreen(xdisplay), 32, TrueColor, &vInfo);
attr.colormap = XCreateColormap(xdisplay, p_window, vInfo.visual, AllocNone);
attr.border_pixel = transparent;
attr.background_pixel = transparent;

XMainWindow = XCreateWindow(xdisplay, p_window, x, y, width, height, 0, vInfo.depth, InputOutput, vInfo.visual, CWColormap | CWBorderPixel | CWBackPixel, &attr);

0 个答案:

没有答案