PonyPlayer
lyrics.h
浏览该文件的文档.
1#pragma once
2
3#include <QtCore>
4#include <QtQuick/QQuickItem>
5#include <QQmlListProperty>
6#include <utility>
7#include "liblrc/lyrics.h"
8
9class LyricSentence : public QObject {
10Q_OBJECT
11 Q_PROPERTY(qreal startTime READ getStartTime WRITE setStartTime NOTIFY startTimeChanged)
12 Q_PROPERTY(qreal endTime READ getEndTime WRITE setEndTime NOTIFY endTimeChanged)
13 Q_PROPERTY(QString sentence READ getSentence WRITE setSentence NOTIFY sentenceChanged)
14 QML_ELEMENT
15private:
16 qreal m_startTime, m_endTime;
17 QString m_sentence;
18public:
19 Q_INVOKABLE LyricSentence() = default;
20
21 Q_INVOKABLE explicit LyricSentence(qreal startTime, qreal endTime, QString sentence) :
22 m_startTime(startTime), m_endTime(endTime), m_sentence(std::move(sentence)) {}
23
24 Q_INVOKABLE bool operator<(const LyricSentence &t) const { return m_startTime < t.m_startTime; }
25
26 Q_INVOKABLE bool operator==(const LyricSentence &t) const {
27 return m_startTime == t.m_startTime && m_endTime == t.m_endTime && m_sentence == t.m_sentence;
28 }
29
30 Q_INVOKABLE qreal getStartTime() const { return m_startTime; }
31
32 Q_INVOKABLE qreal getEndTime() const { return m_endTime; }
33
34 Q_INVOKABLE QString getSentence() const { return m_sentence; }
35
36 Q_INVOKABLE void setStartTime(const qreal &newTime) { m_startTime = newTime; }
37
38 Q_INVOKABLE void setEndTime(const qreal &newTime) { m_endTime = newTime; }
39
40 Q_INVOKABLE void setSentence(const QString &newSentence) { m_sentence = newSentence; }
41
42signals:
43
45
47
49
50};
51
52class LyricsData : public QObject {
53Q_OBJECT
54 Q_PROPERTY(QQmlListProperty<LyricSentence> sentences READ getSentences NOTIFY lyricsChange)
55 QML_ELEMENT
56private:
57
58 QVector<LyricSentence *> m_sentences;
59
60 static void appendSentence(QQmlListProperty<LyricSentence> *, LyricSentence *);
61
62 static qsizetype sentenceCount(QQmlListProperty<LyricSentence> *);
63
64 static LyricSentence *getSentence(QQmlListProperty<LyricSentence> *, qsizetype);
65
66 static void clearSentences(QQmlListProperty<LyricSentence> *);
67
68 static void replaceSentence(QQmlListProperty<LyricSentence> *, qsizetype, LyricSentence *);
69
70 static void removeLastSentence(QQmlListProperty<LyricSentence> *);
71
72public:
73 LyricsData();
74
75 QQmlListProperty<LyricSentence> getSentences();
76
78
79 [[nodiscard]] qsizetype sentenceCount() const;
80
81 [[nodiscard]] LyricSentence *getSentence(qsizetype) const;
82
83 void clearSentences();
84
85 void replaceSentence(qsizetype, LyricSentence *);
86
87 void removeLastSentence();
88
89signals:
90
92
93public slots:
94
95 void clearLyricSentence() { m_sentences.clear(); emit lyricsChange();};
96
98 m_sentences.push_back(sentence);
99 qDebug() << sentence->getStartTime();
100 };
101
103 emit lyricsChange();
104 }
105};
106
107class LyricsReader : public QObject {
108Q_OBJECT
109public:
110 LyricsReader() = default;
111
112public slots:
113
114 void readLyric(const QString &url);
115
116signals:
117
118 void lyricReadCompleted(std::shared_ptr<lrc::Lyrics> response);
119
120};
Definition: lyrics.h:9
void startTimeChanged()
Q_INVOKABLE QString getSentence() const
Definition: lyrics.h:34
Q_INVOKABLE bool operator<(const LyricSentence &t) const
Definition: lyrics.h:24
Q_INVOKABLE qreal getStartTime() const
Definition: lyrics.h:30
qreal startTime
Definition: lyrics.h:11
Q_INVOKABLE qreal getEndTime() const
Definition: lyrics.h:32
QString sentence
Definition: lyrics.h:13
Q_INVOKABLE LyricSentence(qreal startTime, qreal endTime, QString sentence)
Definition: lyrics.h:21
Q_INVOKABLE void setSentence(const QString &newSentence)
Definition: lyrics.h:40
void sentenceChanged()
Q_INVOKABLE bool operator==(const LyricSentence &t) const
Definition: lyrics.h:26
Q_INVOKABLE void setEndTime(const qreal &newTime)
Definition: lyrics.h:38
Q_INVOKABLE void setStartTime(const qreal &newTime)
Definition: lyrics.h:36
Q_INVOKABLE LyricSentence()=default
qreal endTime
Definition: lyrics.h:12
void endTimeChanged()
Definition: lyrics.h:52
void clearSentences()
Definition: lyrics.cpp:75
LyricsData()
Definition: lyrics.cpp:83
void removeLastSentence()
Definition: lyrics.cpp:63
void lyricsChange()
QQmlListProperty< LyricSentence > getSentences()
Definition: lyrics.cpp:24
void pushLyricSentence(LyricSentence *sentence)
Definition: lyrics.h:97
QQmlListProperty< LyricSentence > sentences
Definition: lyrics.h:54
void appendSentences(LyricSentence *)
Definition: lyrics.cpp:51
qsizetype sentenceCount() const
Definition: lyrics.cpp:71
void pushLyricSentenceCompleted()
Definition: lyrics.h:102
void clearLyricSentence()
Definition: lyrics.h:95
Definition: lyrics.h:107
LyricsReader()=default
void readLyric(const QString &url)
Definition: lyrics.cpp:8
void lyricReadCompleted(std::shared_ptr< lrc::Lyrics > response)