如何在 QGraphicsView 上添加效果?

Posted

技术标签:

【中文标题】如何在 QGraphicsView 上添加效果?【英文标题】:How to add an effect on QGraphicsView? 【发布时间】:2016-02-08 22:39:48 【问题描述】:

我正在尝试在我的 graphicsView 上添加模糊效果,但我必须触发两次操作才能应用效果。第一次触发它时,它会将效果应用到 graphicsView 的边界线和第二次触发它应用它在现场。这是我的代码(与着色效果相同):

void MainWindow::on_actionBlur_triggered()

    QGraphicsBlurEffect *a=new QGraphicsBlurEffect;
    a->setBlurHints(QGraphicsBlurEffect::QualityHint);
    a->boundingRectFor(ui->graphicsView->viewport()->rect());
    ui->graphicsView->setGraphicsEffect(a);

你能找出错误或提出不同的方法吗?

【问题讨论】:

可能缺少无效或重绘调用?我认为它不是在那里自动完成的 我尝试了 repaint 和 invalidateScene 调用,但没有结果。 【参考方案1】:

我通过递归调用触发器一秒钟找到了解决方案。在 numOfTriggers 中,我保存了调用它的时间。

void Editor::on_actionBlur_triggered()

    if(numOfTriggers<2)
        QGraphicsBlurEffect *a=new QGraphicsBlurEffect;
        a->setBlurHints(QGraphicsBlurEffect::QualityHint);
        a->boundingRectFor(ui->graphicsView->viewport()->rect());
        ui->graphicsView->setGraphicsEffect(a);
        numOfTriggers++;
        on_actionBlur_triggered();
    
    else
        numOfTriggers=0;
    

【讨论】:

【参考方案2】:

我有另一个想法:你应该在构造函数中将 QGraphicsView 传递给你的 QGraphicsBlurEffect。

QGraphicsBlurEffect* a = new QGraphicsBlurEffect(ui->graphicsView);

试试你的 mainWindow 或者“this”,如果不工作的话。

【讨论】:

以上是关于如何在 QGraphicsView 上添加效果?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过鼠标单击在 QGraphicsView 中选择位置并添加项目?

如何识别 QGraphicsView 鼠标移动事件?

在QT编程中,QGraphicsView是怎么显示出图片的

在另一个类的表单上添加 QGraphicsView

如何将场景添加到先前定义的 QGraphicsView

QgraphicsView 橡皮筋拖动效果缩放行为