1

我正在尝试将 X11 Pixmap 绘制到QWidget.

在过去使用 Qt4.x 时,我会利用QPixmap::fromX11Pixmap它来创建一个QPixmap我可以在绘画中轻松使用的东西。然而,这个功能在 Qt5 中已被删除,据我所知,该功能尚未在 Qt 框架的其他地方提供。

虽然我已经能够创建和分配 X11 Pixmap,但我无法找到任何解决方案来执行绘画。欢迎任何建议/解决方案!

4

1 回答 1

1

我有同样的问题,没有找到任何答案。在做了一些技巧之后,我来到了这个解决方案。

// Initialize your X11 enviroment.
Display* display ...
Pixmap pixmap ... 
/* Do your pixmap drawing HERE */
// Make sure all drawing have been done
XFlush(display);
// Convert your Pixmap to XImage
XImage *image = XGetImage(display, pixmap, 0, 0, width, height, 0xFFFFFFFF, ZPixmap);
// Convert XImage to QImage
QImage tempImage = qimageFromXImage(image);
// Destroy temporal XImage
XDestroyImage(image);
// Finally create a QPixmap
QPixmap finalPixmap = QPixmap::fromImage(tempImage);

函数代码qimageFromXImage(...)可以在https://github.com/adobe/webkit/blob/master/Source/WebCore/plugins/qt/QtX11ImageConversion.h中找到。 您可以将标头和实现复制到源代码树。

问题解决了!可以与 QQuickPaintedItem 或 QGraphicsItem 一起使用。

于 2017-08-09T20:34:03.053 回答