[PySide] how to suppress qwidget's drop shadow under windows?

Frank Rueter | OHUfx frank at ohufx.com
Sat Jul 12 05:30:51 CEST 2014


Ah, thanks for confirming that.

Interestingly I don't get a WindowDeactivate event when I click outside 
of the widget. I do get a ActionChanged event though, but that doesn't 
sound right for this.


On 12/07/14 1:14 PM, Tony Barbieri wrote:
> Btw, the shadow stuff is actually at the Windows level.  You'd have to 
> do some pretty low level hacks to remove it from what I understand. 
>  That or force everyone to turn off drop shadows in their Windows 
> theme :).
>
>
> On Fri, Jul 11, 2014 at 11:13 PM, Tony Barbieri <greatrgb at gmail.com 
> <mailto:greatrgb at gmail.com>> wrote:
>
>     Yea, that is one downside.  We worked around it by doing the
>     following:
>
>     |class  ClosePopupFilter(QtCore.QObject):
>
>          def  eventFilter(self, target, event):
>              if  event.type() == QtCore.QEvent.WindowDeactivate:
>                  target.close()
>              return  False
>
>     class  Popup(QtGui.QWidget):
>
>          def  __init__(self, parent=None):
>              super(Popup, self).__init__(parent)
>
>              self.__popup_filter = ClosePopupFilter()
>              self.installEventFilter(self.__popup_filter)
>
>
>              self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
>                                       QtCore.Qt.WindowStaysOnTopHint |
>                                       QtCore.Qt.CustomizeWindowHint |
>                                       QtCore.Qt.Tool)
>     |
>
>     ‚Äč
>
>
>     On Fri, Jul 11, 2014 at 10:51 PM, Frank Rueter | OHUfx
>     <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>
>         Ah, thanks.
>         one issue I see the Qt.Tool flag is that it won't close the
>         widget when I click outside of it, something the Qt.Popup flag
>         does for me.
>
>         But I guess I can re-implement one of the event handles to
>         reproduce this behaviour. MIght be easier than hunting down
>         whatever would suppress the shadow in the default palette.
>
>         Cheers,
>         frank
>
>
>         On 12/07/14 12:28 PM, Tony Barbieri wrote:
>>         Hey Frank,
>>
>>         Checkout this page: http://qt-project.org/doc/qt-4.8/qt.html
>>
>>         Here is the description for those two flags:
>>
>>         Qt::Popup 	0x00000008 | Window 	Indicates that the widget is
>>         a pop-up top-level window, i.e. that it is modal, but has a
>>         window system frame appropriate for pop-up menus.
>>         Qt::Tool 	0x0000000a | Window 	Indicates that the widget is a
>>         tool window. A tool window is often a small window with a
>>         smaller than usual title bar and decoration, typically used
>>         for collections of tool buttons. If there is a parent, the
>>         tool window will always be kept on top of it. If there isn't
>>         a parent, you may consider using Qt::WindowStaysOnTopHint as
>>         well. If the window system supports it, a tool window can be
>>         decorated with a somewhat lighter frame. It can also be
>>         combined with Qt::FramelessWindowHint.
>>
>>         Glad it helped!
>>
>>         Best,
>>
>>
>>
>>         On Fri, Jul 11, 2014 at 9:54 PM, Frank Rueter | OHUfx
>>         <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>>
>>             Great, that did in deed fix it, thanks so much!!
>>             Can somebody explain what those two flags actually try to
>>             do? I'm still finding it difficult to find comprehensive
>>             documentation about flags in general.
>>
>>
>>             Cheers,
>>             frank
>>
>>             On 11/07/14 11:23 PM, Tony Barbieri wrote:
>>>             Hey Frank,
>>>
>>>             I'm pretty sure we use the QtCore.Qt.Tool flag rather
>>>             than the QtCore.Qt.Popup flag to deal with removing the
>>>             shadow.  If that doesn't work I can look deeper into how
>>>             we've dealt with this.
>>>
>>>             Best,
>>>
>>>
>>>             On Thu, Jul 10, 2014 at 11:15 PM, Frank Rueter | OHUfx
>>>             <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>>>
>>>                 Hi all,
>>>
>>>                 I was given some code that uses a QWidget, makes it
>>>                 completely
>>>                 transparent, then adds a custom paintEvent to draw
>>>                 some custom items.
>>>                 This is meant or a fancy right click menu. Under OSX
>>>                 it ll looks swell,
>>>                 but under windows I get the default drop shadow,
>>>                 because of the
>>>                 QtCore.Qt.Popup flag.
>>>                 e.g.:
>>>                 class MyMenu(PySide.QtGui.QWidget):
>>>
>>>                    def __init__(self):
>>>                  QtGui.QWidget.__init__(self)
>>>                  self.setAttribute(QtCore.Qt.WA_TranslucentBackground,
>>>                 True)
>>>                  self.setWindowFlags(QtCore.Qt.Popup |
>>>                 QtCore.Qt.FramelessWindowHint)
>>>
>>>                 w = MyMenu()
>>>                 w = show()
>>>
>>>                 What is the easiest way to turn off that off (drop
>>>                 shadows for
>>>                 transparent widgets just look irritating :-D )? I
>>>                 guess I could inherit
>>>                 from QMenu instead of QWidget but would expect more
>>>                 work to get it to
>>>                 it's current state and am not entirely sure if that
>>>                 would fix the issue.
>>>
>>>                 Any ideas?
>>>
>>>                 Cheers,
>>>                 frank
>>>
>>>
>>>
>>>
>>>
>>>                 _______________________________________________
>>>                 PySide mailing list
>>>                 PySide at qt-project.org <mailto:PySide at qt-project.org>
>>>                 http://lists.qt-project.org/mailman/listinfo/pyside
>>>
>>>
>>>
>>>
>>>             -- 
>>>             Tony
>>
>>
>>
>>
>>         -- 
>>         Tony
>
>
>
>
>     -- 
>     Tony
>
>
>
>
> -- 
> Tony

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20140712/212edd61/attachment.html>


More information about the PySide mailing list