gpt4 book ai didi

c++ - Qt 使用 QGraphicsDropShadow 为 QLabel 添加投影效果

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:59 26 4
gpt4 key购买 nike

我必须在我的应用程序中为多个 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。

最佳答案

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

关于c++ - Qt 使用 QGraphicsDropShadow 为 QLabel 添加投影效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com