3
XComposite 및 XRender를 사용하여 QWidget (또는 QPixmap)에 창의 내용을 렌더링하려고합니다. 제가 직면 한 문제는 QWidget에서 그림을 렌더링 할 수 없다는 것입니다. 아래 코드는 다음 자습서를 사용하여 작성했습니다. http://ktown.kde.org/~fredrik/composite_howto.html 창 ID는 하드 코드되어 있으므로 다른 창 ID를 사용할 수 있습니다. 열리는 QWidget 창이 원래 창의 내용을 표시하지 않지만 빈 회색 사각형 만 표시합니다. QPixmap을 사용하면 똑같은 것입니다. 검정 사각형과 그 밖의 것은 없습니다. XRender 지원이 사용됩니다.Qt + XCompositeRender 문제
내가 여기에 누락 되었습니까? 당신이 QPixmap
버퍼를 저장할 수있는 대신 기본 raster
그래픽 시스템의
app.setGraphicsSystem("native");
를 사용할 필요가 같은
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Display *dpy = XOpenDisplay(getenv("DISPLAY"));
Window window = 2097154;
XCompositeRedirectWindow(dpy, window, CompositeRedirectManual);
XWindowAttributes attr;
XGetWindowAttributes(dpy, window, &attr);
XRenderPictFormat *format = XRenderFindVisualFormat(dpy, attr.visual);
bool hasAlpha = (format->type == PictTypeDirect && format->direct.alphaMask);
int x = attr.x;
int y = attr.y;
int width = attr.width;
int height = attr.height;
qDebug() << hasAlpha << x << y << width << height;
XRenderPictureAttributes pa;
pa.subwindow_mode = IncludeInferiors; // Don't clip child widgets
QWidget widget;
widget.setGeometry(100, 100, 500, 500);
widget.show();
Picture picture = XRenderCreatePicture(dpy, window, format, CPSubwindowMode, &pa);
XRenderComposite(dpy, PictOpSrc, picture, None,
widget.x11PictureHandle(), 0, 0, 0, 0, 0, 0, 500, 500);
XRenderFreePicture(dpy, picture);
return app.exec();
}