QGraphicsDropShadowEffect在QLabel中无法正常工作

时间:2014-02-14 09:16:18

标签: qt qlabel

我试图使用QGraphicsDropShadowEffect在qlabel中添加阴影效果。所以我添加了这样的效果。

QGraphicsDropShadowEffect * effect = new QGraphicsDropShadowEffect();   效果 - > setBlurRadius(0);   effect-> setColor(QColor(255,0,0));   效果 - > setOffset(1,1);   label1-> setGraphicsEffect(效果);

但效果看起来很怪异,因为像Spinbox这样的其他小部件正常工作。

这是qlabel看起来的图像。 enter image description here

正确的是qspinbox,它适用于它但是对于qlable,它看起来很奇怪。它的行为与父项中的所有标签相同。

但是,如果我接受代码并制作示例应用程序,它可以正常工作..

示例应用

 QApplication app(argc,argv);
    QMainWindow* window = new QMainWindow();
    QWidget* centralWidget = new QWidget();

    window->setCentralWidget(centralWidget);

    window->setWindowTitle("QLabel With Shadow");
    QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    QLabel* label = new QLabel();
    sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
    label->setSizePolicy(sizePolicy);
    label->setMinimumSize(QSize(0, 0));
    label->setMaximumSize(QSize(16777215, 16777215));
    label->setStyleSheet(QString::fromUtf8("font-size: 12px,0.2em;                          \n"
                                           "font-family: Segoe Regular;  \n"
                                           "color: rgb(0, 0, 0);"));
    label->setText(QApplication::translate("EyGuiProgresColorUi", "Contrast", 0, QApplication::UnicodeUTF8));

    label->setParent(centralWidget);

    QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
    effect->setBlurRadius(0);
    effect->setColor(QColor(255, 0, 0));
    effect->setOffset(1,1);
    label->setGraphicsEffect(effect);

    window->show();

    return app.exec();

此示例应用程序为我提供了我需要的内容。enter image description here请帮帮我..

1 个答案:

答案 0 :(得分:1)

我知道这是一个很老的话题。但是,互联网上没有提供任何答案,Qt也没有说明这种意外和非标准的行为。更多的是,我有完全相同的问题。因此,我将提供一个对我有用的解决方案,至少希望将来其他开发人员能够找到这个解决方案。

我的问题是在没有指定选择器的情况下动态设置样式表。当你这样做,并且你正在添加 QGraphicsDropShadowEffect 作为一个效果,那么你会得到这种奇怪的行为。所以,为了不在这种奇怪的情况下找到,我必须确保我设置样式表,以便指定所有选择器。

例如,如果要为QLabel设置颜色(让我们说对象名称是 myLabel )小部件,那么您可以通过两种不同的方式进行操作:

// Without specifying selector
label->setStyleSheet("color:#000000;");

// By specifying selector
label->setStyleSheet("#myLabel{color:#000000;}");

在两种方式中,您都会得到相同的结果。但是,后者不会破坏 QGraphicsDropShadowEffect 效果。我相信这个问题的作者有同样或类似的问题。