Qt 将QPaint渲染结果存储到QPixmap实例中

Qt 将QPaint渲染结果存储到QPixmap实例中,qt,qt5,qgraphicsscene,qgraphicsitem,qpainter,Qt,Qt5,Qgraphicsscene,Qgraphicsitem,Qpainter,我想对由GRadialGradient生成并由QPainter渲染的渐变应用模糊效果。对于这种图形效果,我必须提供一个模糊效果,然后调用->render()方法,但我找不到任何方法将QPainter直接添加到任何渐变中 那么有没有办法做到这一点呢? 我认为将QPainter渲染结果转换为QPixmap可以解决问题。但我不知道如何解决。我也不知道转换后实时应用模糊效果的性能会如何 以下是我到目前为止所写内容的摘录: void MainWindow::paintEvent(QPaintEvent *

我想对由
GRadialGradient
生成并由
QPainter
渲染的渐变应用模糊效果。对于这种图形效果,我必须提供一个模糊效果,然后调用
->render()
方法,但我找不到任何方法将
QPainter
直接添加到任何渐变中

那么有没有办法做到这一点呢?
我认为将
QPainter
渲染结果转换为
QPixmap
可以解决问题。但我不知道如何解决。我也不知道转换后实时应用模糊效果的性能会如何

以下是我到目前为止所写内容的摘录:

void MainWindow::paintEvent(QPaintEvent *event){
    Q_UNUSED(event);

    QRadialGradient grad(QPoint(this->width()/2,this->height()/2) , 50);
    grad.setSpread(QGradient::RepeatSpread);
    grad.setColorAt(0 , QColor(0,0,0));
    grad.setColorAt(1 , QColor(100,100,100));
    QPainter paint(this);

    paint.setRenderHint(QPainter::Antialiasing , true);

    QRectF r1(0,0,this->width(),this->height());

    paint.drawRect(r1);
    QBrush brush(grad);
    paint.fillRect(r1 , brush);
...
...
}
结果如下:


谢谢。

您的问题显然是一个问题,而不是询问根本问题:如何显示显示圆形渐变+模糊效果的QGraphicsItem,有关尝试解决方案的问题:转换为QPixmap

在这种情况下,最简单的方法是使用QGraphicsRectItem,将渐变设置为笔刷,并将效果应用于该项:

QGraphicsBlurEffect *effect = new QGraphicsBlurEffect(this);     
effect->setBlurRadius(100);

QRadialGradient grad(QPoint(50, 50), 50);
grad.setSpread(QGradient::RepeatSpread);
grad.setColorAt(0 , QColor(0, 0, 0));
grad.setColorAt(1 , QColor(100, 100, 100));

QGraphicsRectItem *item = new QGraphicsRectItem(0, 0, 100, 100); 
item->setBrush(QBrush(grad));
item->setGraphicsEffect(effect);

您的问题令人困惑,是否希望主窗口对您使用的渐变具有模糊效果?@eyllanesc模糊效果实际上应用于将添加到QGraphicscene的QGraphicsSitem实例。它与我的主窗口无关。我不希望效果是窗口范围的(在这种特定情况下,由于
r1
的大小等于窗口大小(第12行),因此它看起来像是窗口范围的。但它不是).mmm,在您的代码中,我没有看到任何与QGraphicsSitems相关的内容,因此您的示例会产生混乱。我认为您有一个XY问题,到目前为止,我不了解您的基本目标是什么,但在您的整个帖子中,您谈论了一个可能的解决方案,但不知道该解决方案是否足以解决未知的基本问题。@Eyllani我还没有添加任何与
qgraphicscene
相关的内容,因为我仍然不知道应该做什么。代码只是为了演示我创建的画师,以进一步减少混淆。如果混淆,我可以删除它。同时也忘了代码。问题很简单。让我来澄清混淆:怎么做o将QPainter渲染的结果缓存到QPixmap?在链接产品的解决方案中,是一个QImage,据我所知,您希望获得QPixmap,如果是这样,那么您可以使用QPixmap::fromImage()