Qt QGraphicsDropShadowEffect is not showing

隐身守侯 提交于 2019-12-30 10:59:07

问题


I am creating a custom widget my_widget inheriting from QWidget.

Here, I have a label to which I would like to apply QGraphicsDropShadowEffect however it does not seem to be working since I don't see any shadows.

My code is in Python and it's:

eff = QGraphicsDropShadowEffect()
self.my_widget_label.setGraphicsEffect(eff)

I tried various alterations to this code to no avail.

After doing a through search on Google, I came across many similar questions without answers.

What might be the cause? How can I get the shadow?


回答1:


See if this works for you:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sip
sip.setapi('QString', 2)
sip.setapi('QVariant', 2)

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class testShadow(QWidget):
    def __init__(self, parent=None):
        super(testShadow, self).__init__(parent)

        self.resize(94, 35)
        self.verticalLayout = QVBoxLayout(self)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QLabel(self)
        self.label.setText("Text Label")

        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(5)
        self.label.setGraphicsEffect(self.shadow)

        self.verticalLayout.addWidget(self.label)

if __name__ == "__main__":
    import  sys

    app = QApplication(sys.argv)
    main = testShadow()
    main.show()
    sys.exit(app.exec_())




回答2:


Works for me in C++. I did the following in a QDialog containing a QLabel object named titleLabel. I'm using Qt 4.8.4 on a Windows XP computer.

QGraphicsDropShadowEffect* eff = new QGraphicsDropShadowEffect(this);
eff->setBlurRadius(5);
titleLabel->setGraphicsEffect(eff);



回答3:


I have only every tried to use this (and used it successfully) in QGraphicsScene situations. This works for me, while trying to set it on a normal QWidget actually crashes the entire application:

from PyQt4 import QtGui

class Graphics(QtGui.QWidget):
    def __init__(self):
        super(Graphics, self).__init__()

        layout = QtGui.QVBoxLayout(self)
        layout.setMargin(0)

        shad = QtGui.QGraphicsDropShadowEffect(self)
        shad.setBlurRadius(5)

        self.scene = QtGui.QGraphicsScene(self)
        self.view = QtGui.QGraphicsView(self)
        self.view.setScene(self.scene)
        text = self.scene.addText("Drop Shadow!")
        text.setGraphicsEffect(shad)

        layout.addWidget(self.view)

if __name__ == "__main__":
    app = QtGui.QApplication([])
    main = Graphics()
    main.show()
    main.raise_()
    app.exec_()


来源:https://stackoverflow.com/questions/13996130/qt-qgraphicsdropshadoweffect-is-not-showing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!