【问题标题】:Qt adding drop shadow effect for QLabel using QGraphicsDropShadowQt 使用 QGraphicsDropShadow 为 QLabel 添加投影效果
【发布时间】:2015-12-15 05:19:55
【问题描述】:

我必须在我的应用程序中为多个 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 对象并使用它设置 QLabels。

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。

【问题讨论】:

  • 你能找到解决这个问题的方法吗?

标签: c++


【解决方案1】:

只是想自己解决这个问题。尽管这个解决方案让我很痛苦,但它是我很快想到的最好的解决方案。在这里使用 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 手动添加

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2017-12-23
    • 2019-03-25
    • 2014-04-07
    • 2017-09-09
    • 2012-11-10
    • 2011-01-11
    相关资源
    最近更新 更多