Анимация панели инструментов Qt, основанная на непрозрачности - PullRequest
0 голосов
/ 07 июня 2018

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 Ответ

0 голосов
/ 07 июня 2018

Это будет БАГ

Это БАГ, как упомянуто @ 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);
...