MainWindow.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /**
  2. * 叶海辉
  3. * QQ群121376426
  4. * http://blog.yundiantech.com/
  5. */
  6. #ifndef MAINWINDOW_H
  7. #define MAINWINDOW_H
  8. #include <QWidget>
  9. #include <QListWidgetItem>
  10. #include <QImage>
  11. #include <QPaintEvent>
  12. #include <QTimer>
  13. #include <QPushButton>
  14. #include <QPropertyAnimation>
  15. #include <QMenu>
  16. #include <QAction>
  17. #include "VideoPlayer/VideoPlayer.h"
  18. #include "DragAbleWidget.h"
  19. namespace Ui {
  20. class MainWindow;
  21. }
  22. ///这个是播放器的主界面 包括那些按钮和进度条之类的
  23. class MainWindow : public DragAbleWidget, public VideoPlayer::EventHandle
  24. {
  25. Q_OBJECT
  26. public:
  27. explicit MainWindow(QWidget *parent = 0);
  28. ~MainWindow();
  29. void addVideoFiles(const QStringList &videoFileList);
  30. void addVideoFile(const QString &filePath);
  31. void clear();
  32. void startPlay(); //播放第一个
  33. void stopPlay();
  34. protected:
  35. void closeEvent(QCloseEvent *event);
  36. bool eventFilter(QObject *target, QEvent *event);
  37. private:
  38. Ui::MainWindow *ui;
  39. VideoPlayer *mPlayer; //播放线程
  40. QTimer *mTimer; //定时器-获取当前视频时间
  41. float mVolume;
  42. QTimer *mTimer_CheckControlWidget; //用于控制控制界面的出现和隐藏
  43. QPropertyAnimation *mAnimation_ControlWidget; //控制底部控制控件的出现和隐藏
  44. void showOutControlWidget(); //显示底部控制控件
  45. void hideControlWidget(); //隐藏底部控制控件
  46. QMenu* mPopMenu;
  47. QAction *mAddVideoAction;
  48. QAction *mEditVideoAction;
  49. QAction *mDeleteVideoAction;
  50. QAction *mClearVideoAction;
  51. void doAdd();
  52. void doAddStream();
  53. void doDelete();
  54. void doClear();
  55. void setVideoNums(const int &nums);
  56. QList<QString> mVideoFileList;
  57. int mCurrentIndex;
  58. QListWidgetItem *mCurrentItem;
  59. bool mIsNeedPlayNext;
  60. void playVideo(const int &index);
  61. void playVideoFile(const QString &filePath);
  62. private slots:
  63. ///播放器相关的槽函数
  64. void slotSliderMoved(int value);
  65. void slotTimerTimeOut();
  66. void slotBtnClick(bool isChecked);
  67. void slotItemDoubleClicked(QListWidgetItem *item);
  68. void slotCustomContextMenuRequested();
  69. void slotActionClick();
  70. ///以下函数,是播放器的回调函数,用于输出信息给界面
  71. protected:
  72. ///打开文件失败
  73. void onOpenVideoFileFailed(const int &code);
  74. ///打开sdl失败的时候回调此函数
  75. void onOpenSdlFailed(const int &code);
  76. ///获取到视频时长的时候调用此函数
  77. void onTotalTimeChanged(const int64_t &uSec);
  78. ///播放器状态改变的时候回调此函数
  79. void onPlayerStateChanged(const VideoPlayer::State &state, const bool &hasVideo, const bool &hasAudio);
  80. ///显示视频数据,此函数不宜做耗时操作,否则会影响播放的流畅性。
  81. void onDisplayVideo(VideoRawFramePtr videoFrame);
  82. void onVideoBuffer(VideoEncodedFramePtr videoFrame); //回调未解码前的数据
  83. };
  84. #endif // MAINWINDOW_H