Я пытаюсь добавить эффект размытия на мой 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);
}
Можете ли вы заметить ошибку или предложить другой способ сделать это?
Я нашел решение, вызывая триггер на секунду рекурсивно. В 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;
}
}
У меня есть еще одна идея: вы должны передать QGraphicsView вашему QGraphicsBlurEffect в конструкторе.
QGraphicsBlurEffect * a = new QGraphicsBlurEffect (ui-> graphicsView);
Попробуйте с вашим mainWindow или «this», если не работает.