TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
ttkclickedslider.cpp
Go to the documentation of this file.
1 #include "ttkclickedslider.h"
2 
3 #include <QMouseEvent>
4 
6  : TTKClickedSlider(Qt::Horizontal, parent)
7 {
8 
9 }
10 
11 TTKClickedSlider::TTKClickedSlider(Qt::Orientation orientation, QWidget *parent)
12  : QSlider(orientation, parent),
13  m_value(0),
14  m_mousePress(false)
15 {
16  setCursor(QCursor(Qt::PointingHandCursor));
17 }
18 
19 bool TTKClickedSlider::event(QEvent *event)
20 {
21  if(m_mousePress)
22  {
23  setValue(m_value);
24  }
25  return QSlider::event(event);
26 }
27 
28 void TTKClickedSlider::mousePressEvent(QMouseEvent *event)
29 {
30  QSlider::mousePressEvent(event);
31  if(event->button() == Qt::LeftButton)
32  {
33  m_mousePress = true;
34 
35  double pos;
36  if(orientation() == Qt::Horizontal)
37  {
38  pos = event->pos().x() * 1.0 / width();
39  m_value = pos * (maximum() - minimum()) + minimum();
40  }
41  else
42  {
43  pos = event->pos().y() * 1.0 / height();
44  m_value = maximum() - pos * (maximum() - minimum());
45  }
46  }
47 }
48 
49 void TTKClickedSlider::mouseMoveEvent(QMouseEvent *event)
50 {
51  QSlider::mouseMoveEvent(event);
52  if(m_mousePress)
53  {
54  if(orientation() == Qt::Horizontal)
55  {
56  const int x = event->pos().x();
57  if((x >= 0) && (x <= width()))
58  {
59  const double pos = event->pos().x() * 1.0 / width();
60  m_value = pos * (maximum() - minimum()) + minimum();
61  setValue(m_value);
62  }
63  else if(x < 0)
64  {
65  m_value = minimum();
66  }
67  else
68  {
69  m_value = maximum();
70  }
71  }
72  else
73  {
74  const int y = event->pos().y();
75  if((y >= 0) && (y <= height()))
76  {
77  const double pos = event->pos().y() * 1.0 / height();
78  m_value = maximum() - pos * (maximum() - minimum());
79  setValue(m_value);
80  }
81  else if(y < 0)
82  {
83  m_value = maximum();
84  }
85  else
86  {
87  m_value = minimum();
88  }
89  }
90 
91  Q_EMIT clicked();
92  }
93 }
94 
95 void TTKClickedSlider::mouseReleaseEvent(QMouseEvent *event)
96 {
97  QSlider::mouseReleaseEvent(event);
98  m_mousePress = false;
99 }
virtual void mouseMoveEvent(QMouseEvent *event) override
The class of the slider that can clicked any position.
virtual void mousePressEvent(QMouseEvent *event) override
TTKClickedSlider(QWidget *parent=nullptr)
virtual void mouseReleaseEvent(QMouseEvent *event) override
virtual bool event(QEvent *event) overridefinal