Как добавить эффект на QGraphicsView?

Я пытаюсь добавить эффект размытия на мой graphicsView, но мне нужно дважды запустить действие, чтобы применить эффект. При первом его срабатывании эффект применяется к границе graphicsView, а при втором запуске — на scene.Here мой код (то же самое с эффектом colorize):

void MainWindow::on_actionBlur_triggered()
{
QGraphicsBlurEffect *a=new QGraphicsBlurEffect;
a->setBlurHints(QGraphicsBlurEffect::QualityHint);
a->boundingRectFor(ui->graphicsView->viewport()->rect());
ui->graphicsView->setGraphicsEffect(a);
}

Можете ли вы заметить ошибку или предложить другой способ сделать это?

0

Решение

Я нашел решение, вызывая триггер на секунду рекурсивно. В 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;
}
}
0

Другие решения

У меня есть еще одна идея: вы должны передать QGraphicsView вашему QGraphicsBlurEffect в конструкторе.

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

Попробуйте с вашим mainWindow или «this», если не работает.

0

По вопросам рекламы [email protected]