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

Tony Barbieri greatrgb at gmail.com
Sat Jul 12 05:14:14 CEST 2014


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> 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>
> 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>
>> 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>
>>> 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
>>>> 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/20140711/353f27bb/attachment.html>


More information about the PySide mailing list