[SOLVED] Widget Fade In Effect Possible?
maximo last edited by maximo
Is it possible to have a widget fade-in effect? I'm using Qt 5.5 Open Source.
Currently I'm doing inline dialogs in my application. So, instead of showing a separate window (complete with titlebar, etc.), I'm showing a promoted widget. So, I dim the background using an opaque QFrame control, and then inside that show a QStackedWidget control where I have each of my dialogs like "Are you sure?" and "Register Product" and "Help & Support Info".
To make this even snazzier, I want to know if I can fade in the widget and its contents somehow. Is there an easy way to do that, such as a stylesheet transition?
well if you are on windows, you could use the windowOpacity
see here for some code
He uses QPropertyAnimation to animate the property.
maximo last edited by
@mrjj I found that your technique works on a Mac as well. (I'm running El Captain version of OSX.)
QPropertyAnimation *a = new QPropertyAnimation(this,"windowOpacity"); a->setDuration( 150 ); a->setStartValue( 0.0 ); a->setEndValue( 1.0 ); a->start();
That works great on a window. If I want to do it on a widget, one technique I found was to just change it's geometry properties like so:
// w is my widget QRect r = QRect(); r.setX(w->x()); r.setY(w->y()); r.setHeight(w->height()); r.setWidth(w->width()); QRect r2 = r; r2.setX(w->x() + (w->width() / 2)); r2.setY(w->y() + (w->height() / 2)); r2.setHeight(0); r2.setWidth(0); QPropertyAnimation *a = new QPropertyAnimation(w,"geometry"); a->setDuration( 150 ); a->setStartValue( r2 ); a->setEndValue( r ); a->start();
Then, reverse this animation on hiding the widget.
LuGRU last edited by
Alternative approach, use QGraphicsOpacityEffect and animate opacity of QGraphicsOpacityEffect.
maximo last edited by
@LuGRU Very cool! I finally was able to pull this off with my promoted widget, whereas other techniques didn't work unless I switched the effect to width/height animation.
// w is my widget QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this); w->setGraphicsEffect(eff); QPropertyAnimation *a = new QPropertyAnimation(eff,"opacity"); a->setDuration(300); a->setStartValue(0); a->setEndValue(1); a->start(QPropertyAnimation::DeleteWhenStopped);