[PySide] how to suppress qwidget's drop shadow under windows?
Tony Barbieri
greatrgb at gmail.com
Sat Jul 12 05:59:44 CEST 2014
Ah, maybe because in this example our QWidget is actually a top level
Window...
On Fri, Jul 11, 2014 at 11:30 PM, Frank Rueter | OHUfx <frank at ohufx.com>
wrote:
> 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>
> 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
>
>
>
--
Tony
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20140711/9a772c2a/attachment.html>
More information about the PySide
mailing list