多次应用 QGraphicsDropShadowEffect 会使应用程序崩溃

Applying QGraphicsDropShadowEffect more than once crashes the app

我必须根据某些条件在 QPushButton 上应用阴影效果。如果某些条件为假,我必须删除阴影效果,如果条件为真,则再次添加。我正在尝试使用以下代码,但程序崩溃了。

QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(1);
effect->setOffset(2,2);
ui->btnAdd->setGraphicsEffect(effect);
ui->btnAdd->setGraphicsEffect(NULL); //remove effect
ui->btnAdd->setGraphicsEffect(effect); //add again

这段代码有什么问题?还有其他方法吗?

您可以阅读有关 setGraphicsEffect 的 Qt 文档:

Sets effect as the widget's effect. If there already is an effect installed on this widget, QWidget will delete the existing effect before installing the new effect.

所以当这一行是 运行 :

ui->btnAdd->setGraphicsEffect(NULL); //remove effect

effect 实际上被删除了。因此,每次要设置效果时都应该创建一个新实例。