美文网首页
LiquidEqualizerWidget-master控件的应

LiquidEqualizerWidget-master控件的应

作者: pingWest | 来源:发表于2020-10-14 10:05 被阅读0次

[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();

   }

}

相关文章

网友评论

      本文标题:LiquidEqualizerWidget-master控件的应

      本文链接:https://www.haomeiwen.com/subject/ivpipktx.html