2013-05-28 3 views
1

Я пытаюсь нарисовать X11 Pixmap до QWidget.Как рисовать X11 Pixmap с помощью Qt5

В прошлом, используя Qt4.x, я использовал бы QPixmap::fromX11Pixmap, чтобы создать QPixmap, который я мог бы легко использовать при рисовании. Однако эта функция была удалена в Qt5, и, насколько мне известно, функциональность не была доступна нигде в Qt Framework.

Хотя я смог создать и выделить X11 Pixmap, я не смог найти решение для выполнения картины. Любые предложения/решения приветствуются!

+0

Если вы хотите захватить экран, вы можете использовать 'QScreen :: grabWindow'; Я предполагаю, что вы можете использовать любой «Drawable» в этой функции, но я никогда не пробовал. –

+0

@ н.м. 'QScreen :: grabWindow' использует функцию X11' XGetWindowAttributes' в своей реализации. Любой опыт использования этой функции с помощью XPixmap? Документация для 'XGetWindowAttributes' говорит, что он может сообщить« BadWindow », когда« Значение для аргумента Window не определяет определенное окно ». Поэтому не совсем уверен, что использование «XPixmap» будет работать как «Drawable», а не «Window». Я дам вам попытку и отправлю результат. – Matthew

+0

ОК, так что, возможно, невозможно использовать любые доступные. Я не понимаю, почему можно использовать XML pixmaps в качестве источников изображений; заботиться, чтобы поделиться? –

ответ

0

У меня была такая же проблема и ответа не нашлось. Сделав некоторые хаки, я пришел к этому решению.

// 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.

 Смежные вопросы

  • Нет связанных вопросов^_^