2012-12-21 49 views
2

我正在创建一个继承自QWidget的自定义小部件my_widgetQt QGraphicsDropShadowEffect未显示

在这里,我有一个标签,我想申请QGraphicsDropShadowEffect然而它似乎没有工作,因为我没有看到任何阴影。

我的代码是在Python,它是:

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

我尝试了各种改变这个代码无济于事。

在Google上进行搜索之后,我遇到了很多类似的问题,但没有回答。

可能是什么原因?我怎样才能获得影子?

回答

2

看看这对你的作品:

#!/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_()) 

image

+0

Hello @ X.Jacobs!不幸的是,它不起作用,它像之前提到的@jdi一样崩溃。我想我需要继承QLabel并使用它的paintEvent绘制阴影效果的标签。你能帮我一下吗?我花了过去一小时试图做到这一点,但我不知道如何重新实现一个QLabel的整个paintEvent来绘制标签本身。谢谢! – Phil

+1

你可以随时看看Qt资源本身的灵感。 –

+0

@Phil它不会在这里崩溃,你运行的代码? – 2012-12-25 22:04:20

3

适用于C++。我在包含QLabel对象titleLabelQDialog中做了以下操作。我在Windows XP电脑上使用Qt 4.8.4。

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

嗨@DanielHadberg。非常感谢您为我检查出来。我目前在Mac上。或许那*可能是问题。再次感谢! – Phil

+0

希望你会找到一个可行的解决方案。它可能是Python相关的?确保效果对象不会被破坏。我假设它被分配在堆上,所以它不应该。 –

+0

亲爱的@DanielHedberg,我尝试过并尝试过,但放弃了这一点。我正在创建第二个标签以提供某种“深度”。我认为这是Qt库的Mac或Python抽象问题。非常感谢! – Phil

1

我只有每一个试图用这个(并用它成功)在QGraphicsScene的情况。这适用于我,虽然试图设置它在正常QWidget实际上崩溃了整个应用程序:

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_() 
+0

非常感谢jdi! – Phil