基于不透明度的Qt Toolbar动画
Qt Toolbar animation based on opacity
Toolbar(SelectionToolBar)
允许 LeftToolbarArea
。并且目前是隐藏的。当我将鼠标移到应用程序的左边框时,它会附带在不透明度上定义的动画。这工作正常。但问题是当我将鼠标移到 toolbuttons
上时,即悬停在 toolbuttons
上时,所有工具按钮都会隐藏,尽管我可以单击按钮,但它可以正常工作。只有 toobutton display(view/look) 被隐藏了。我怀疑 "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();
}
这应该是个BUG
这是@KYL3R 提到的 BUG
要重现的演示:
#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);
Toolbar(SelectionToolBar)
允许 LeftToolbarArea
。并且目前是隐藏的。当我将鼠标移到应用程序的左边框时,它会附带在不透明度上定义的动画。这工作正常。但问题是当我将鼠标移到 toolbuttons
上时,即悬停在 toolbuttons
上时,所有工具按钮都会隐藏,尽管我可以单击按钮,但它可以正常工作。只有 toobutton display(view/look) 被隐藏了。我怀疑 "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();
}
这应该是个BUG
这是@KYL3R 提到的 BUG
要重现的演示:
#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);