TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musiclayoutanimationwidget.cpp
Go to the documentation of this file.
2 #include "musicwidgetheaders.h"
3 
4 #include <QPropertyAnimation>
5 
7  : QWidget(parent),
8  m_isAnimating(false),
9  m_currentValue(0),
10  m_widgetLayout(nullptr)
11 {
12 
13  QVBoxLayout *mainLayout = new QVBoxLayout(this);
14  mainLayout->setContentsMargins(0, 0, 0, 0);
15  mainLayout->setSpacing(0);
16 
17  m_mainWidget = new QWidget(this);
18  mainLayout->addWidget(m_mainWidget);
19  setLayout(mainLayout);
20 
21  m_animation = new QPropertyAnimation(m_mainWidget, {}, this);
22  m_animation->setDuration(500);
23  m_animation->setEasingCurve(QEasingCurve::Linear);
24  m_animation->setStartValue(0.0f);
25  m_animation->setEndValue(0.0f);
26  connect(m_animation, SIGNAL(valueChanged(QVariant)), SLOT(valueChanged(QVariant)));
27  connect(m_animation, SIGNAL(finished()), SLOT(animationFinished()));
28 }
29 
31 {
32  delete m_widgetLayout;
33  delete m_mainWidget;
34  delete m_animation;
35 }
36 
38 {
39  if(m_isAnimating)
40  {
41  return;
42  }
43 
44  m_animation->setStartValue(0);
45 
46  m_mainWidget->hide();
47  m_isAnimating = true;
48  m_animation->start();
49 }
50 
52 {
53  m_isAnimating = false;
54  m_animation->stop();
55  m_mainWidget->show();
56 }
57 
59 {
60  connect(m_animation, SIGNAL(finished()), parent, SLOT(updateAnimationLrc()));
61 }
62 
64 {
65  m_widgetLayout->addStretch(stretch);
66 }
67 
68 void MusicLayoutAnimationWidget::addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
69 {
70  m_widgetLayout->addWidget(widget, stretch, alignment);
71 }
72 
74 {
75  m_widgetLayout->removeWidget(widget);
76 }
77 
78 void MusicLayoutAnimationWidget::valueChanged(const QVariant &value)
79 {
80  m_currentValue = -value.toFloat();
81  update();
82 }
83 
85 {
86  m_currentValue = 0;
87  m_isAnimating = false;
88  m_mainWidget->show();
89 }
90 
91 
92 
95 {
96  m_widgetLayout = new QVBoxLayout(m_mainWidget);
97  m_widgetLayout->setContentsMargins(0, 0, 0, 0);
98  m_widgetLayout->setSpacing(0);
99  m_mainWidget->setLayout(m_widgetLayout);
100 }
101 
103 {
104  if(m_isAnimating)
105  {
106  return;
107  }
108 
109  m_animation->setEndValue(height() / m_widgetLayout->count());
110 
112 }
113 
115 {
116  if(m_isAnimating)
117  {
118  QPainter painter(this);
119  QPixmap pix(size());
120  pix.fill(Qt::transparent);
121  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, true);
122  m_mainWidget->render(&pix);
123  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, false);
124 
125  painter.translate(0, m_currentValue);
126  painter.drawPixmap(0, 0, pix);
127  painter.drawPixmap(0, height(), pix);
128  }
129  else
130  {
131  QWidget::paintEvent(event);
132  }
133 }
134 
135 
136 
139 {
140  m_widgetLayout = new QHBoxLayout(m_mainWidget);
141  m_widgetLayout->setContentsMargins(0, 0, 0, 0);
142  m_widgetLayout->setSpacing(0);
143  m_mainWidget->setLayout(m_widgetLayout);
144 }
145 
147 {
148  if(m_isAnimating)
149  {
150  return;
151  }
152 
153  m_animation->setEndValue(width() / m_widgetLayout->count());
154 
156 }
157 
159 {
160  if(m_isAnimating)
161  {
162  QPainter painter(this);
163  QPixmap pix(size());
164  pix.fill(Qt::transparent);
165  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, true);
166  m_mainWidget->render(&pix);
167  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, false);
168 
169  painter.translate(m_currentValue, 0);
170  painter.drawPixmap(0, 0, pix);
171  painter.drawPixmap(width(), 0, pix);
172  }
173  else
174  {
175  QWidget::paintEvent(event);
176  }
177 }
The class of the layout float animation widget.
voidpf void uLong size
Definition: ioapi.h:136
virtual void paintEvent(QPaintEvent *event) overridefinal
void valueChanged(const QVariant &value)
MusicLayoutAnimationWidget(QWidget *parent=nullptr)
virtual void start() overridefinal
virtual void paintEvent(QPaintEvent *event) overridefinal
MusicHLayoutAnimationWidget(QWidget *parent=nullptr)
virtual void start() overridefinal
void addWidget(QWidget *widget, int stretch=0, Qt::Alignment alignment=Qt::Alignment())
MusicVLayoutAnimationWidget(QWidget *parent=nullptr)