在不需要场景/视图的情况下,将QGraphicsItem绘制为QImage



所以我要做的是-使用自定义的QGraphicsItem,我有一个QPainter设置来绘制QImage,然后将其保存到一个文件中(或者只是将QImage保存在内存中,直到我需要它)。

我发现的问题是,只有当QGraphicsItem::paint()属于场景,场景属于视图,并且视图和场景未隐藏时,才会调用它。

以下是我的项目之外用于测试目的的代码:

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();
....

这一切都很好,但我不希望有必要的视图/场景,因为它会显示在主窗口上——有办法解决这个问题吗?

你不能创建一个自定义方法来接受一个QPainter,一个在QImage上画,一个放在你的物品上吗?

相关内容

  • 没有找到相关文章

最新更新