Анимация панели инструментов Qt, основанная на непрозрачности
Toolbar(SelectionToolBar)
позволено LeftToolbarArea
, и в настоящее время скрыт. Когда я подведу указатель мыши к левой границе приложения, появится анимация, определенная для непрозрачности. Это работает нормально. Но проблема в том, когда я двигаюсь над мышью, т.е. toolbuttons
, все кнопки инструментов будут скрыты, хотя я могу нажимать кнопки, это работает. Только дисплей Toobutton (вид / вид) становится скрытым. Я подозреваю, что "fade_effect" выходит из области видимости. Любое решение?
bool evenfilter(...)
{
...
QGraphicsOpacityEffect* fade_effect = new QGraphicsOpacityEffect();
ui->SelectionToolbar->setGraphicsEffect(fade_effect);
QPropertyAnimation *animation = new QPropertyAnimation(fade_effect, "opacity");
animation->setEasingCurve(QEasingCurve::InOutQuad);
animation->setDuration(3000);
animation->setStartValue(0.01);
animation->setEndValue(1.0);
animation->start(QPropertyAnimation::DeleteWhenStopped);
//animation->start();
ui->SelectionToolbar->show();
}
1 ответ
Решение
Это должно быть ошибка
Это ошибка, как упоминалось @KYL3R
Демо для воспроизведения:
#include <QToolBar>
#include <QToolButton>
#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
class ToolBar : public QToolBar
{
Q_OBJECT
public:
ToolBar(QWidget *parent = Q_NULLPTR) :
QToolBar(parent)
{
setGraphicsEffect(&mFadeEffect);
mFadeAnimation.setTargetObject(&mFadeEffect);
mFadeAnimation.setPropertyName("opacity");
mFadeAnimation.setStartValue(0.0);
mFadeAnimation.setEndValue(1);
mFadeAnimation.setDuration(3000);
mFadeAnimation.start();
}
virtual ~ToolBar() {}
private:
QGraphicsOpacityEffect mFadeEffect;
QPropertyAnimation mFadeAnimation;
};
auto toolbar = new ToolBar();
toolbar->addAction("action 1");
toolbar->addAction("action 2");
toolbar->addAction("action 3");
addToolBar(Qt::LeftToolBarArea, toolbar);
Временное решение:
менять
mFadeAnimation.setEndValue(1);
в
mFadeAnimation.setEndValue(0.99);