У меня есть класс Paintable
, который может рисовать себя с помощью QPainter
в качестве аргумента:
class Paintable
{
public:
virtual void paint(QPainter*) = 0;
};
Экземпляры этого класса рисуются на одном QImage:
QImage paint(const std::vector<Paintable*>& paintables) {
QImage result;
QPainter p(&result);
for(int i = 0; i < paintables.size(); ++i) {
paintables[i]->paint(&p);
}
return result;
}
Чего я хочу добиться, так это того, чтобы функция paint
также могла формировать матрицу размера, равного result
размеру изображения, в которой каждая ячейка содержит указатель на Paintable
, который нарисовал соответствующий пиксель в result
изображении (что-то вроде z-буфера).
Этого можно было бы легко достичь, если бы методы отрисовки QPainter
каким-то образом сообщали мне, какие пиксели QPaintDevice
были изменены во время последней операции отрисовки. Любые идеи о том, как это сделать? Должен ли я создать класс, производный от QPaintDevice
или QPaintEngine
?
Я использую Qt 4.6.4.
Спасибо.