3
我想使用XComposite和XRender將窗口的內容渲染到QWidget(或QPixmap)中。 我面臨的問題是我無法將圖片呈現在QWidget中。以下代碼使用以下教程編寫:http://ktown.kde.org/~fredrik/composite_howto.html 窗口ID是硬編碼的,因此可以使用任何其他窗口ID。打開的QWidget窗口不顯示原始窗口的內容,只是顯示空白的灰色矩形。同樣的事情是,如果我使用QPixmap,它只包含黑色矩形,沒有別的。 已啓用XRender支持。Qt + XCompositeRender問題
我在這裏錯過了什麼?
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();
}