所以这就是我正在尝试做的事情 - 使用自定义QGraphicsItem,我将QPainter设置绘制到QImage中,然后将其保存到文件中(或者将QImage保留在内存中直到我需要它)。
我发现的问题是QGraphicsItem :: paint()仅在QGraphcsItem属于场景,场景属于视图,并且视图和场景未被隐藏时才被调用。
以下是我的项目之外用于测试目的的代码:
MyQGfx Class
void MyQGfx::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
qDebug() << "begin of paint function";
QRectF rec = boundingRect();
QImage image(boundingRect().size().toSize(),
QImage::Format_ARGB32_Premultiplied);
image.fill(0);
// construct a dedicated offline painter for this image
QPainter imagePainter(&image);
imagePainter.translate(-boundingRect().topLeft());
// paint the item using imagePainter
imagePainter.setPen(Qt::blue);
imagePainter.setBrush(Qt::green);
imagePainter.drawEllipse(-50, -50, 100, 100);
imagePainter.end();
if(image.save("C://plot.jpg"))
{
qDebug() << "written";
}
else {
qDebug() << "not written";
}
}
MainWindow Class
....
QGraphicsView* view = new QGraphicsView(this);
QGraphicsScene* scene = new QGraphicsScene(this);
view->setScene(scene);
MyQGfx* gfx = new MyQGfx();
scene->addItem(gfx);
gfx->update();
....
这一切都很好,但是我不想要一个必要的视图/场景,因为它会显示在主窗口上 - 有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
你不能只创建一个接受QPainter的自定义方法,一张QImage上的绘画和一件关于你的项目的绘画?