2012-12-21 79 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