Qt使用QGraphicsDropShadow为QLabel添加阴影效果

时间:2014-11-11 15:58:51

标签: c++

我必须在我的应用程序中为多个QLabel应用投影。我使用QGraphicsDropShadowEffect并且它正常工作,如果我为一个QLabel添加它。我尝试为两个QLabel应用相同的图形效果。

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setColor(Qt::white);
effect->setBlurRadius(0);
effect->setXOffset(1);
effect->setYOffset(0);
QLabel* label = new QLabel();
label->setText("QLabel1");
label->setGraphicsEffect(effect);
QLabel* label2 = new QLabel();
label2->setText("QLabel2");
label2->setGraphicsEffect(effect);

在这种情况下,阴影效果仅应用于label2。 我尝试创建两个不同的QGraphicsDropShadowEffect对象并使用它设置QLabel。

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setColor(Qt::white);
QLabel* label = new QLabel();
label->setText("QLabel1");
label->setGraphicsEffect(effect);
QGraphicsDropShadowEffect* effect1 = new QGraphicsDropShadowEffect();
effect1->setColor(Qt::white);
QLabel* label2 = new QLabel();
label2->setText("QLabel2");
label2->setGraphicsEffect(effect1);

在这种情况下,应用程序在QRasterPaintEngine :: transformChanged()调用中崩溃。

有关如何解决此问题的任何想法? 我使用的是qt 5.3。

1 个答案:

答案 0 :(得分:0)

只是想自己解决这个问题。尽管这个解决方案让我很痛苦,但这是我提出的最好的解决方案。使用QList帮助自己:

// List instances containing labels and drop shadows
QList<QLabel*> label_list_;
QList<QGraphicsDropShadowEffect*> shadow_list_;

// Get all UI labels and apply shadows
label_list_ = this->findChildren<QLabel*>();
foreach(QLabel *lbl, label_list_) {
    shadow_list_.append(new QGraphicsDropShadowEffect);
    shadow_list_.back()->setBlurRadius(10);
    shadow_list_.back()->setOffset(3, 3);
    lbl->setGraphicsEffect(shadow_list_.back());
}

如果您不希望列表中的所有UI标签都可以手动添加append

相关问题