Проблема Qt + XCompositeRender - PullRequest
3 голосов
/ 19 июля 2010

Я хочу визуализировать содержимое окна в QWidget (или QPixmap), используя XComposite и XRender. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить изображение в QWidget. Код ниже был написан с использованием следующего учебника: http://ktown.kde.org/~fredrik/composite_howto.html Идентификатор окна жестко закодирован, поэтому может использоваться любой другой идентификатор окна. Открывающееся окно QWidget не отображает содержимое исходного окна, а просто показывает пустой серый прямоугольник. То же самое, если я использую QPixmap, он содержит только черный прямоугольник и ничего больше. Поддержка XRender включена.

Что мне здесь не хватает?

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();
}

1 Ответ

0 голосов
/ 21 июня 2011

Похоже, вам нужно использовать

app.setGraphicsSystem("native"); 

вместо графической системы по умолчанию raster для хранения буфера QPixmap.

...