[PySide] how to suppress qwidget's drop shadow under windows?
Tony Barbieri
greatrgb at gmail.com
Sat Jul 12 05:13:08 CEST 2014
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20140711/1a591ded/attachment.html>
More information about the PySide
mailing list