2010-07-19 1 views
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(); 
} 

답변