Анимация панели инструментов 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);
Другие вопросы по тегам