[Interest] Semi transparent background for contextual menu
Nicolas Krieger
nicolas.krieger-medecom29 at orange.fr
Wed Mar 22 10:17:07 CET 2017
I have finally managed to do what I wanted to. I herited from QMenu with
the following attributes, so that the window is transparent. Then, I add
a widget (with QWidgetAction) with a semi-opaque background.
Snippet
setAttribute( Qt::WA_TranslucentBackground );
setWindowFlags( windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint );
setStyleSheet( "QMenu{background:rgba(0, 0, 0, 0%);}" );
Nicolas Krieger
Le 20/03/2017 à 11:21, Nicolas Krieger a écrit :
>
> You're right. I think having a semi-opaque contextual menu is
> feasible, but the management has to be done by the application and no
> more by Qt.
>
> Thank's for your answers
>
> Nicolas
>
>
> Le 17/03/2017 à 20:03, Etienne Sandré-Chardonnal a écrit :
>> Child widget transparency is rendered by Qt styles directly. On the
>> other hand, on a top level window, transparency must be handled by
>> the system. This is completely different.
>>
>> It is actually possible but more complicated to make transparent
>> windows, look for WA_TranslucentBackground.
>>
>> Cheers,
>>
>> Etienne
>>
>> 2017-03-17 9:59 GMT+01:00 Nicolas Krieger
>> <nicolas.krieger-medecom29 at orange.fr
>> <mailto:nicolas.krieger-medecom29 at orange.fr>>:
>>
>> Hi,
>>
>> Thank you for the answer. I made it work with your help, but I
>> lost the transparency of the popup.
>>
>> If the widget has a parent, there is transparency, but I lost the
>> Qt::ActiveWindowFocusReason when I lost focus
>>
>> Le 16/03/2017 à 22:38, Etienne Sandré-Chardonnal a écrit :
>>> I forgot, in order to detect when the window lost "focus" (ie is
>>> no longer the active window), you need to catch QFocusEvent, and
>>> check if reason() is Qt::ActiveWindowFocusReason
>>>
>>> Cheers,
>>>
>>> Etienne
>>>
>>> 2017-03-16 22:34 GMT+01:00 Etienne Sandré-Chardonnal
>>> <etienne.sandre at m4x.org <mailto:etienne.sandre at m4x.org>>:
>>>
>>> Hi,
>>>
>>> That's because a context menu is a system level window, not
>>> a widget.
>>> And what you call focus is in fact not focus, but active
>>> window. See QApplication::activeWindow
>>>
>>> You create such a window by creating a QWidget with no
>>> parent and a WindowFlag:
>>>
>>> QWidget(0, Qt::Popup);
>>>
>>> 2017-03-16 15:56 GMT+01:00 Nicolas Krieger
>>> <nicolas.krieger-medecom29 at orange.fr
>>> <mailto:nicolas.krieger-medecom29 at orange.fr>>:
>>>
>>> Hi,
>>>
>>> I try to have a contextual menu with a semi-transparent
>>> background. I didnt manage to to it with QMenu, so I
>>> decided to use a custom widget.
>>>
>>> I have no problem to have a widget with a
>>> semi-transparent background, I just changed the alpha of
>>> the background color.
>>>
>>> My problem is that I want this widget to behave like a
>>> contextual menu, that is to say, I want it to be closed
>>> when focus is lost. But this is lot as soon as I clic on
>>> a children-widget of this menu. I don't know how to do.
>>>
>>> Nicolas Krieger
>>>
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>> <http://lists.qt-project.org/mailman/listinfo/interest>
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>> http://lists.qt-project.org/mailman/listinfo/interest
>> <http://lists.qt-project.org/mailman/listinfo/interest>
>>
>>
>
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20170322/8f91f243/attachment.html>
More information about the Interest
mailing list