VideoSlider.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /**
  2. * 叶海辉
  3. * QQ群121376426
  4. * http://blog.yundiantech.com/
  5. */
  6. #include "VideoSlider.h"
  7. #include <QDebug>
  8. #include <QTimer>
  9. #include <QResizeEvent>
  10. #include <QStyle>
  11. VideoSlider::VideoSlider(QWidget *parent) :
  12. QSlider(parent)
  13. {
  14. setMouseTracking(true);
  15. this->setOrientation(Qt::Horizontal);
  16. isSliderMoving = false;
  17. m_timer = new QTimer;
  18. m_timer->setInterval(100);
  19. connect(m_timer,SIGNAL(timeout()),this,SLOT(slotTimerTimeOut()));
  20. m_timer_mousemove = new QTimer;
  21. m_timer_mousemove->setInterval(100);
  22. connect(m_timer_mousemove,SIGNAL(timeout()),this,SLOT(slotMousemoveTimerTimeOut()));
  23. }
  24. VideoSlider::~VideoSlider()
  25. {
  26. }
  27. void VideoSlider::resizeEvent(QResizeEvent *event)
  28. {
  29. // qDebug()<<"void MySlider::resizeEvent(QResizeEvent *event)";
  30. }
  31. void VideoSlider::mousePressEvent(QMouseEvent *event)
  32. {
  33. // isSliderMoving = true;
  34. int posX = event->pos().x();
  35. int w = this->width();
  36. // qint64 value = posX*1.0/w * this->maximum();
  37. int value = QStyle::sliderValueFromPosition(minimum(), maximum(), event->pos().x(), width());
  38. setValue(value);
  39. // qDebug()<<value<<maximum();
  40. emit sig_valueChanged(value);
  41. // emit valueChanged(value);
  42. // QSlider::mousePressEvent(event);
  43. }
  44. void VideoSlider::mouseMoveEvent(QMouseEvent *event)
  45. {
  46. // qDebug()<<"void MySlider::mouseMoveEvent(QMouseEvent *event)"<<event->pos();
  47. // if (isSliderMoving)
  48. // {
  49. // m_timer->stop();
  50. // videoThread->hideIn();
  51. // }
  52. // else
  53. // {
  54. // m_posX = event->pos().x();
  55. // m_timer_mousemove->stop();
  56. // m_timer_mousemove->start();
  57. // }
  58. m_posX = event->pos().x();
  59. m_timer_mousemove->stop();
  60. m_timer_mousemove->start();
  61. QSlider::mouseMoveEvent(event);
  62. }
  63. void VideoSlider::mouseReleaseEvent(QMouseEvent *event)
  64. {
  65. // emit sig_valueChanged(this->value());
  66. // isSliderMoving = false;
  67. // QSlider::mouseReleaseEvent(event);
  68. }
  69. void VideoSlider::enterEvent(QEvent *)
  70. {
  71. m_timer->stop();
  72. }
  73. void VideoSlider::leaveEvent(QEvent *)
  74. {
  75. m_timer_mousemove->stop();
  76. m_timer->start();
  77. }
  78. bool VideoSlider::seek()
  79. {
  80. return true;
  81. }
  82. void VideoSlider::setValue(int value)
  83. {
  84. if (!isSliderMoving)
  85. QSlider::setValue(value);
  86. }
  87. //void VideoSlider::setCutMode()
  88. //{
  89. // videoThread->setCutMode();
  90. // connect(videoThread,SIGNAL(sig_setStart(qint64)),this,SIGNAL(sig_setStart(qint64)));
  91. // connect(videoThread,SIGNAL(sig_setEnd(qint64)),this,SIGNAL(sig_setEnd(qint64)));
  92. //}
  93. bool VideoSlider::openFile(char*fileName)
  94. {
  95. // videoThread->openFile(fileName);
  96. return true;
  97. }
  98. bool VideoSlider::closeFile()
  99. {
  100. return 0;
  101. }
  102. //void VideoSliderView::slotTotalTimeChanged(qint64 uSec)
  103. //{
  104. // setRange(0,uSec);
  105. //}
  106. void VideoSlider::slotTimerTimeOut()
  107. {
  108. // qDebug()<<videoThread->getWidget()->hasFocus();
  109. // qDebug()<<videoThread->getWidget()->geometry()<<QCursor::pos()<<videoThread->getWidget()->geometry().contains(QCursor::pos());
  110. // if (!videoThread->getWidget()->geometry().contains(QCursor::pos()))
  111. // {
  112. // m_timer->stop();
  113. //// videoThread->hideIn();
  114. // }
  115. }
  116. void VideoSlider::slotMousemoveTimerTimeOut()
  117. {
  118. m_timer_mousemove->stop();
  119. int w = this->width();
  120. // qint64 value = m_posX*1.0/w*videoThread->getTotalTime();
  121. // this->setValue(value);
  122. QPoint point = this->mapToGlobal(QPoint(0,0));
  123. int width = this->width();
  124. if (parent() != NULL)
  125. {
  126. QWidget *widget = (QWidget *)this->parent();
  127. point = widget->mapToGlobal(QPoint(0,0));
  128. width = widget->width();
  129. }
  130. // videoThread->showOut(point,width);
  131. //// qDebug()<<value<<videoThread->getTotalTime();
  132. // videoThread->seek(value);
  133. }