[if !supportLists]404. [endif]C:\Users\rwp-pc\Desktop\LiquidEqualizerWidget-master\
效果适用于基线的设置,当鼠标移动时,band区的值(平均值)作相应的增减。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LiquidEqualizerWidget* w = new LiquidEqualizerWidget();
//Force standard color palette
QApplication::setPalette(w->style()->standardPalette());
//Set bands
w->setBands(QVector<float>(std::initializer_list<float>({12.0,2.0,-1.0,1.0,2.0,3.0,0.0})));
//Inherit accent color from palette
w->setAccentColor(w->palette().highlight().color());
w->show();
//Randomize bands every 3 seconds
QTimer* timer = new QTimer();
srand(time(NULL));
QObject::connect(timer,&QTimer::timeout,[=](){
QVector<float> nums;
for (int i = 0; i < 10; ++i)
nums.push_back((float)rand()/(float)(RAND_MAX/24)-12);
w->setBands(nums);
timer->start(3000);
});
timer->start(3000);
return a.exec();
}
//动画的实现
void LiquidEqualizerWidget::setBand(int i, float value, bool animate, bool manual) {
mSelectedBand = i;
mManual = manual;
if(animate){
QVariantAnimation* anim = new QVariantAnimation(this);
anim->setDuration(mAnimationDuration);
anim->setEasingCurve(QEasingCurve(QEasingCurve::Type::InOutCirc));
anim->setStartValue(value);
anim->setEndValue(mLevels[i]);
anim->setDirection(QVariantAnimation::Backward);
connect(anim,QOverload<const QVariant &>::of(&QVariantAnimation::valueChanged),[this,i](const QVariant& v){
mLevels[i] = v.toFloat();
repaint();
});
anim->start();
}
else{
mLevels[i] = value;
repaint();
}
}
网友评论