PonyPlayer
thumbnail.hpp
浏览该文件的文档.
1//
2// Created by ColorsWind on 2022/5/10.
3//
4
5#pragma once
6
7#include <QQmlContext>
8#include "fireworks.hpp"
9#include "hurricane.hpp"
10#include "preview.hpp"
11
12class Thumbnail : public Fireworks {
13 Q_OBJECT
14 QML_ELEMENT
15 Q_PROPERTY(QString player READ getPlayer WRITE setPlayer)
16private:
17 Preview *preview;
18 QString m_player;
19 Hurricane *hurricane = nullptr;
20public:
21 Thumbnail(QQuickItem *parent= nullptr) : Fireworks(parent) {
22 preview = new Preview(this);
24 connect(this, &QQuickItem::windowChanged, [this](QQuickWindow *window){
25 if (!window) { return; }
26 auto *context = qmlContext(this);
27 while(!hurricane && context) {
28 hurricane = reinterpret_cast<Hurricane *>(context->objectForName(m_player));
29 context = context->parentContext();
30 }
31 if (!hurricane) {
32 throw std::runtime_error("Cannot not get Hurricane by id:" + m_player.toStdString());
33 }
34 connect(hurricane, &Hurricane::signalOpenFile, preview, &Preview::openFile);
35 connect(hurricane, &Hurricane::signalClose, preview, &Preview::close);
36 connect(preview, &Preview::previewResponse, this, &Thumbnail::slotPreviewResponse);
37 });
38 }
39
40 [[nodiscard]] const QString &getPlayer() const {
41 return m_player;
42 }
43
44 void setPlayer(const QString &player) {
45 Thumbnail::m_player = player;
46 qDebug() << "Set" << player;
47 }
48
49 virtual ~Thumbnail() override {
50 preview->close();
51 preview->deleteLater();
52 }
53public slots:
54
60 Q_INVOKABLE void previewRequest(qreal pos) {
61 emit signalPreviewRequest(pos, QPrivateSignal());
62 }
63private slots:
64 void slotPreviewResponse(qreal pos, const VideoFrameRef& frame) {
65// setVisible(false);
66 setVideoFrame(frame);
67 emit previewResponse(pos, QPrivateSignal());
68 };
69signals:
74 void previewResponse(qreal pos, QPrivateSignal);
75
76 void signalPreviewRequest(qreal pos, QPrivateSignal);
77
78};
Definition: fireworks.hpp:10
void setVideoFrame(const VideoFrameRef &pic)
Definition: fireworks.hpp:112
播放器 QuickItem 组件,提供暴露给 QML 的接口。
Definition: hurricane.hpp:28
void signalOpenFile(const QString &path, QPrivateSignal)
void signalClose(QPrivateSignal)
Definition: preview.hpp:11
void openFile(const QString &fn)
Definition: preview.hpp:38
void previewResponse(qreal pos, VideoFrameRef frame, QPrivateSignal)
void previewRequest(qreal pos)
Definition: preview.hpp:31
void close()
Definition: preview.hpp:56
Definition: thumbnail.hpp:12
void setPlayer(const QString &player)
Definition: thumbnail.hpp:44
Q_INVOKABLE void previewRequest(qreal pos)
Definition: thumbnail.hpp:60
virtual ~Thumbnail() override
Definition: thumbnail.hpp:49
QML_ELEMENTQString player
Definition: thumbnail.hpp:15
Thumbnail(QQuickItem *parent=nullptr)
Definition: thumbnail.hpp:21
void previewResponse(qreal pos, QPrivateSignal)
const QString & getPlayer() const
Definition: thumbnail.hpp:40
void signalPreviewRequest(qreal pos, QPrivateSignal)
Definition: frame.hpp:47