ticks;
62 | int lastindex = 0;
63 | while (ret >= 0) {
64 | QStringList tstr = timeExp.capturedTexts();
65 | QTime time(0, tstr[1].toInt(), tstr[2].toInt(), tstr[3].toInt());
66 | ticks.append(time);
67 | lastindex = ret + timeExp.matchedLength();
68 | ret = timeExp.indexIn(line, lastindex);
69 | }
70 | QString lyricstr = line.right(line.size() - lastindex);
71 | for (const QTime& t : ticks) {
72 | QLyric lyric;
73 | lyric.time = t.minute() * 60 * 1000 + t.second() * 1000 + t.msec();
74 |
75 | lyric.lyric = lyricstr;
76 |
77 | // qDebug() << lyricstr;
78 | result.append(lyric);
79 | }
80 | }
81 | std::sort(result.begin(), result.end(), [] (const QLyric& a, const QLyric& b) -> bool {
82 | return a.time < b.time;
83 | });
84 |
85 | return result;
86 | }
87 |
88 |
89 | void Lyrics::setTickLrc(qint64 position)
90 | {
91 | if(m_lyric.size() <= 0 || m_iCurrentIndex >= m_lyric.size())
92 | return;
93 |
94 |
95 | for(int i = 0; i < m_lyric.size(); i++)
96 | {
97 |
98 | if(position > m_lyric.at(i).time)
99 | {
100 | m_iCurrentIndex = i;
101 | }
102 | }
103 |
104 |
105 | if(position > m_lyric.at(m_iCurrentIndex).time)
106 | {
107 | QString lrc;
108 | lrc.clear();
109 | lrc += QString("");
110 | lrc += m_aristName + " - " + m_songName;
111 | lrc += QString("
");
112 |
113 | for(int j = m_iCurrentIndex - 1; j < m_lyric.size(); j++)
114 | {
115 | if(j < 0)
116 | continue;
117 |
118 | if(m_iCurrentIndex == j)
119 | {
120 | lrc += QString("");
121 | lrc += m_lyric.at(m_iCurrentIndex).lyric;
122 | lrc += QString("
");
123 | }
124 | else
125 | {
126 | lrc += "";
127 | lrc += m_lyric.at(j).lyric;
128 | lrc += "
";
129 | }
130 |
131 |
132 | }
133 | ui->label->setText(lrc);
134 | m_iCurrentIndex++;
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/lyrics.h:
--------------------------------------------------------------------------------
1 | #ifndef LYRICS_H
2 | #define LYRICS_H
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | namespace Ui {
10 | class Lyrics;
11 | }
12 |
13 | struct QLyric
14 | {
15 | qint64 time;
16 | QString lyric;
17 | };
18 |
19 | class Lyrics : public QFrame
20 | {
21 | Q_OBJECT
22 |
23 | public:
24 | explicit Lyrics(QWidget *parent = 0);
25 | ~Lyrics();
26 |
27 | private:
28 | Ui::Lyrics *ui;
29 | QList parse(QTextStream &stream);
30 | QList m_lyric;
31 |
32 | QString m_songName;
33 | QString m_aristName;
34 | QString m_ablumName;
35 |
36 |
37 | int m_iCurrentIndex;
38 | public:
39 | void setLrc(QString lrc);
40 |
41 | void currentSongChannged(QString songName, QString aristName, QString ablumName);
42 | public slots:
43 | void setTickLrc(qint64 position);
44 | };
45 |
46 | #endif // LYRICS_H
47 |
--------------------------------------------------------------------------------
/lyrics.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Lyrics
4 |
5 |
6 |
7 | 0
8 | 0
9 | 758
10 | 554
11 |
12 |
13 |
14 | Frame
15 |
16 |
17 | QFrame::StyledPanel
18 |
19 |
20 | QFrame::Raised
21 |
22 |
23 | -
24 |
25 |
26 | <html><head/><body><p align="center"><span style=" font-weight:600;">平凡之路</span></p><p align="center">作词:韩寒,朴树</p><p align="center">作曲:朴树</p><p align="center"><span style=" font-weight:600; color:#aaaa00;">演唱:朴树</span></p><p align="center">徘徊着的 在路上的</p><p align="center">你要走吗</p><p align="center">易碎的 骄傲着</p><p align="center">那也曾是我的模样</p><p align="center">沸腾着的 不安着的</p><p align="center">你要去哪</p><p align="center">谜一样的 沉默着的</p><p align="center">故事你真的在听吗</p><p align="center">我曾经跨过山和大海 也穿过人山人海 我曾经拥有着一切 转眼都飘散如烟 我曾经失落失望失掉所有方向 直到看见平凡才是唯一的答案</p><p align="justify">当你仍然 还在幻想</p><p align="justify">你的明天</p><p align="center">她会好吗 还是更烂</p><p align="center">对我而言是另一天</p><p align="center">我曾经毁了我的一切 只想永远地离开 我曾经堕入无边黑暗 想挣扎无法自拔 我曾经象你象他象那野草野花 绝望着 渴望着 哭着笑着平凡着</p><p align="center">向前走 就这么走 就算你被给过什么 向前走 就这么走 就算你被夺走什么 向前走 就这么走 就算你会错过什么 向前走 就这么走 就算你会</p><p align="center">我曾经跨过山和大海 也穿过人山人海 我曾经拥有着一切 转眼都飘散如烟 我曾经失落失望失掉所有方向 直到看见平凡才是唯一的答案</p><p align="center">我曾经毁了我的一切 只想永远地离开 我曾经堕入无边黑暗 想挣扎无法自拔 我曾经像你像他像那野草野花 绝望着 渴望着 哭着笑着平凡着</p></body></html>
27 |
28 |
29 | Qt::AlignCenter
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/main.cpp:
--------------------------------------------------------------------------------
1 | #include "widget.h"
2 | #include
3 | #include
4 | #include
5 |
6 | int main(int argc, char *argv[])
7 | {
8 | QApplication a(argc, argv);
9 | Widget w;
10 |
11 | QHotkey hotkey(QKeySequence("ctrl+alt+Q"), true);//The hotkey will be automatically registered
12 | qDebug() << "Is Registered: " << hotkey.isRegistered();
13 |
14 | QObject::connect(&hotkey, &QHotkey::activated, qApp, [&](){
15 | qDebug() << "Hotkey Activated - the application will quit now";
16 | qApp->quit();
17 | });
18 |
19 |
20 | QHotkey hotkeyPrev(QKeySequence("ctrl+left"), true);//The hotkey will be automatically registered
21 | QObject::connect(&hotkeyPrev, &QHotkey::activated, &w, &Widget::on_prevtoolButton_clicked);
22 |
23 |
24 | QHotkey hotkeyNext(QKeySequence("ctrl+right"), true);//The hotkey will be automatically registered
25 | QObject::connect(&hotkeyNext, &QHotkey::activated, &w, &Widget::on_nexttoolButton_clicked);
26 |
27 |
28 |
29 | QDesktopWidget *pDesk = QApplication::desktop();
30 | w.move((pDesk->width() - w.width()) / 2, (pDesk->height() - w.height()) / 8);
31 |
32 | w.setWindowIcon(QIcon(":/img/baiduFm.png"));
33 | w.show();
34 |
35 | return a.exec();
36 | }
37 |
--------------------------------------------------------------------------------
/qhotkey.pri:
--------------------------------------------------------------------------------
1 | CONFIG += C++11
2 |
3 | HEADERS += $$PWD/QHotkey/qhotkey.h \
4 | $$PWD/QHotkey/qhotkey_p.h
5 |
6 | SOURCES += $$PWD/QHotkey/qhotkey.cpp
7 |
8 | mac {
9 | SOURCES += $$PWD/QHotkey/qhotkey_mac.cpp
10 | LIBS += -framework Carbon
11 | } else:win32 {
12 | SOURCES += $$PWD/QHotkey/qhotkey_win.cpp
13 | LIBS += -luser32
14 | } else:unix {
15 | SOURCES += $$PWD/QHotkey/qhotkey_x11.cpp
16 | QT += x11extras
17 | LIBS += -lX11
18 | }
19 |
20 | INCLUDEPATH += $$PWD/QHotkey
21 |
--------------------------------------------------------------------------------
/screenshot/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spygg/QBaiduFm/6a40aeff291a60911fd8a149a28febf42d4a8803/screenshot/download.png
--------------------------------------------------------------------------------
/screenshot/ubuntu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spygg/QBaiduFm/6a40aeff291a60911fd8a149a28febf42d4a8803/screenshot/ubuntu.png
--------------------------------------------------------------------------------
/screenshot/win10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spygg/QBaiduFm/6a40aeff291a60911fd8a149a28febf42d4a8803/screenshot/win10.png
--------------------------------------------------------------------------------
/volpannel.cpp:
--------------------------------------------------------------------------------
1 | #include "volpannel.h"
2 | #include
3 |
4 | volPannel::volPannel(QWidget *parent):QSlider(parent)
5 | {
6 |
7 | }
8 |
9 |
10 | void volPannel::leaveEvent(QEvent *)
11 | {
12 | setVisible(false);
13 | }
14 |
--------------------------------------------------------------------------------
/volpannel.h:
--------------------------------------------------------------------------------
1 | #ifndef VOLPANNEL_H
2 | #define VOLPANNEL_H
3 | #include
4 |
5 | class volPannel : public QSlider
6 | {
7 | Q_OBJECT
8 | public:
9 | volPannel(QWidget *parent = 0);
10 |
11 | private:
12 |
13 | void leaveEvent(QEvent *);
14 | };
15 |
16 | #endif // VOLPANNEL_H
17 |
--------------------------------------------------------------------------------
/widget.cpp:
--------------------------------------------------------------------------------
1 | #include "widget.h"
2 | #include "ui_widget.h"
3 | #include "lyrics.h"
4 | #include "aristpicture.h"
5 | #include "downloadfile.h"
6 |
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | Widget::Widget(QWidget *parent) :
13 | QWidget(parent),
14 | ui(new Ui::Widget)
15 | {
16 | ui->setupUi(this);
17 | layout()->setSizeConstraint(QLayout::SetFixedSize);
18 | layout()->setAlignment( Qt::AlignHCenter);
19 | m_cookJar = new QNetworkCookieJar;
20 | m_userLonIndlg = new LoginDlg(0, m_cookJar);
21 | m_channelWidget = new ChannelsWidget(0, m_cookJar);
22 | m_pPlayer = new QMediaPlayer(this);
23 | m_iCurrentSongIndex = 0;
24 | ui->volSlider->hide();
25 | ui->channelwidget->hide();
26 |
27 |
28 |
29 | connect(m_userLonIndlg, SIGNAL(loginSuccess(QString)), ui->aristPicWidget, SLOT(userLoninSlot(QString)));
30 | connect(this, SIGNAL(channelInfoSignal(QString)), ui->aristPicWidget, SLOT(channelChangedSlot(QString)));
31 | connect(ui->channelwidget, SIGNAL(channelChanged(CHANNEL_INFO)), this, SLOT(channelChangedSlot(CHANNEL_INFO)));
32 | connect(m_pPlayer, &QMediaPlayer::mediaStatusChanged, this, &Widget::mediaStatusChanged);
33 | connect(m_pPlayer, &QMediaPlayer::positionChanged, this, &Widget::positionChanged);
34 | connect(m_pPlayer, &QMediaPlayer::durationChanged, this, &Widget::durationChanged);
35 | connect(m_pPlayer, SIGNAL(positionChanged(qint64)), ui->lycWidget, SLOT(setTickLrc(qint64)));
36 | connect(m_pPlayer, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(errorOccur(QMediaPlayer::Error)));
37 | connect(ui->volSlider, &QSlider::valueChanged, this, &Widget::volChannged);
38 | connect(ui->progressSlider, &QSlider::sliderMoved, this, &Widget::setPosition);
39 | connect(ui->aristPicWidget, SIGNAL(pauseSignal(bool)), this, SLOT(pauseSlot(bool)));
40 | connect(m_pPlayer, SIGNAL(durationChanged(qint64)), ui->aristPicWidget, SLOT(setDefultPic(qint64)));
41 | connect(m_pPlayer, SIGNAL(positionChanged(qint64)), ui->aristPicWidget, SLOT(positionChanged(qint64)));
42 |
43 | ui->volSlider->setRange(0, 100);
44 | ui->volSlider->setValue(60);
45 |
46 | //歌曲频道信息
47 | QSettings settings(QSettings::IniFormat, QSettings::UserScope, "QBaiduFm", "QBaiduFm");
48 | settings.beginGroup("User");
49 | int iChannel = settings.value("ChannelIndex").toInt();
50 | int iCheck = settings.value("RememberMe").toInt();
51 | settings.endGroup();
52 |
53 | //登录
54 | if(iCheck)
55 | {
56 | m_userLonIndlg->logIn();
57 | }
58 | //获取频道列表
59 | ui->channelwidget->channelSelected(iChannel);
60 | }
61 |
62 | void Widget::errorOccur(QMediaPlayer::Error error)
63 | {
64 | ui->lycWidget->setLrc(m_pPlayer->errorString());
65 |
66 | qDebug() << "User Debug ---->error occured!" << m_pPlayer->errorString() << error;
67 |
68 | if(QMediaPlayer::NetworkError != error)
69 | {
70 | nextSong();
71 | }
72 | }
73 |
74 | void Widget::pauseSlot(bool pause)
75 | {
76 | if(pause)
77 | m_pPlayer->pause();
78 | else
79 | m_pPlayer->play();
80 | }
81 |
82 | void Widget::volChannged(qint64 position)
83 | {
84 | m_pPlayer->setVolume(position);
85 | }
86 |
87 | void Widget::mediaStatusChanged(QMediaPlayer::MediaStatus status)
88 | {
89 | if(status == QMediaPlayer::EndOfMedia ||
90 | status == QMediaPlayer::NoMedia ||
91 | status == QMediaPlayer::InvalidMedia)
92 | {
93 | //qDebug() << "播放完成";
94 | nextSong();
95 | }
96 | }
97 |
98 | void Widget::durationChanged(qint64 duration)
99 | {
100 | ui->progressSlider->setRange(0, duration);
101 | }
102 |
103 | void Widget::setPosition(qint64 position)
104 | {
105 | m_pPlayer->setPosition(position);
106 | }
107 |
108 | void Widget::positionChanged(qint64 position)
109 | {
110 | ui->progressSlider->setValue(position);
111 | }
112 |
113 |
114 | void Widget::channelChangedSlot(CHANNEL_INFO channel)
115 | {
116 | m_songIdList.clear();
117 | m_iCurrentSongIndex = 0;
118 |
119 |
120 | m_currentChannelId.channelId = channel.channelId;
121 | m_currentChannelId.channelName = channel.channelName;
122 |
123 | //初始化某个频道列表下的所有歌曲
124 | initSongIdList();
125 | }
126 |
127 | void Widget::initSongIdList()
128 | {
129 | //第二步,获取某个频道下的歌曲ID列表
130 | GetSongPlayListId getPlayListId(this, m_cookJar);
131 | m_songIdList = getPlayListId.getSongIdList(m_currentChannelId.channelId);
132 |
133 | qDebug() << "频道:" << m_currentChannelId.channelName << m_currentChannelId.channelId<< "共有歌曲" << m_songIdList.size();
134 |
135 |
136 | QString info = m_currentChannelId.channelName + " 共有歌曲: " + QString::number(m_songIdList.size());
137 | emit channelInfoSignal(info);
138 | m_iCurrentSongIndex = 0;
139 | play(0);
140 | }
141 |
142 | Widget::~Widget()
143 | {
144 | delete m_userLonIndlg;
145 | delete ui;
146 | }
147 |
148 | void Widget::on_settingtoolButton_clicked()
149 | {
150 | m_userLonIndlg->showDlg();
151 | }
152 |
153 | void Widget::closeEvent(QCloseEvent *)
154 | {
155 | m_userLonIndlg->close();
156 | }
157 |
158 | void Widget::on_voltoolButton_clicked()
159 | {
160 | if(ui->volSlider->isHidden())
161 | {
162 | ui->volSlider->show();
163 | }
164 | else
165 | ui->volSlider->hide();
166 | }
167 |
168 | void Widget::on_prevtoolButton_clicked()
169 | {
170 | prevSong();
171 | }
172 |
173 | void Widget::on_nexttoolButton_clicked()
174 | {
175 | nextSong();
176 | }
177 |
178 | void Widget::on_showChanneltoolButton_clicked()
179 | {
180 | if(ui->channelwidget->isHidden())
181 | {
182 | ui->channelwidget->show();
183 |
184 | // QPropertyAnimation *anim = new QPropertyAnimation(ui->channelwidget, "geometry");
185 | // anim->setDuration(1500);
186 |
187 | // anim->setEasingCurve(QEasingCurve::OutCubic);
188 | // ui->channelwidget->setVisible(true);
189 | // connect(anim, &QPropertyAnimation::finished, [this] () {
190 | // ui->channelwidget->setVisible(false);
191 | // });
192 | // anim->start(QPropertyAnimation::DeleteWhenStopped);
193 |
194 | }
195 | else
196 | ui->channelwidget->hide();
197 | }
198 |
199 |
200 | void Widget::prevSong()
201 | {
202 | qDebug() << "上一曲";
203 |
204 | if(m_iCurrentSongIndex <= 0)
205 | {
206 | initSongIdList();
207 | return;
208 | }
209 |
210 | m_iCurrentSongIndex--;
211 |
212 | play(m_iCurrentSongIndex);
213 | }
214 |
215 |
216 | void Widget::nextSong()
217 | {
218 | qDebug() << "下一首" << m_iCurrentSongIndex << m_songIdList.size();
219 | if(m_iCurrentSongIndex >= m_songIdList.size())
220 | {
221 | initSongIdList();
222 | return;
223 | }
224 |
225 | m_iCurrentSongIndex++;
226 |
227 | play(m_iCurrentSongIndex);
228 | }
229 |
230 | void Widget::play(int index)
231 | {
232 | if(index >= m_songIdList.size() || index < 0)
233 | return;
234 |
235 | GetSongRealLink getSongLink;
236 | m_currentSongInfo = getSongLink.getSongRealLinkById(m_songIdList.at(index));
237 |
238 | m_pPlayer->setMedia(QUrl(m_currentSongInfo.songRealLink));
239 | m_pPlayer->play();
240 |
241 |
242 | //获取歌词
243 | GetLrc getLrc;
244 | QString lrc = getLrc.getLrc(m_currentSongInfo.lrcLink);
245 | ui->lycWidget->currentSongChannged(m_currentSongInfo.songName, m_currentSongInfo.artistName, m_currentSongInfo.albumName);
246 | ui->lycWidget->setLrc(lrc);
247 |
248 | //显示歌手图片
249 | GetAristPic getPic;
250 | QPixmap picMap = getPic.getAristPic(m_currentSongInfo.songPicRadio);
251 | ui->aristPicWidget->setAristPic(picMap);
252 | }
253 |
254 |
255 | //下载歌曲
256 | void Widget::on_downloadtoolButton_clicked()
257 | {
258 | QString fileName;
259 | DownLoadFile downMp3;
260 |
261 | QDir dir;
262 | if(!dir.exists("./download"))
263 | {
264 | dir.mkdir("./download");
265 | }
266 | fileName = "./download/" + m_currentSongInfo.songName + ".mp3";
267 |
268 | qDebug() << fileName;
269 |
270 | downMp3.getMp3File(fileName, m_currentSongInfo.songRealLink);
271 |
272 | qDebug() << "下载完成";
273 | }
274 |
--------------------------------------------------------------------------------
/widget.h:
--------------------------------------------------------------------------------
1 | #ifndef WIDGET_H
2 | #define WIDGET_H
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 |
15 | #include "logindlg.h"
16 | #include "channelswidget.h"
17 | #include "lyrics.h"
18 | #include "volpannel.h"
19 | #include "widget.h"
20 | #include "aristpicture.h"
21 | #include "getsongplaylistid.h"
22 | #include "getsongreallink.h"
23 | #include "getaristpic.h"
24 | #include "getlrc.h"
25 |
26 | namespace Ui {
27 | class Widget;
28 | }
29 |
30 | class Widget : public QWidget
31 | {
32 | Q_OBJECT
33 |
34 | public:
35 | explicit Widget(QWidget *parent = 0);
36 | ~Widget();
37 |
38 | public slots:
39 | void on_settingtoolButton_clicked();
40 |
41 | void on_voltoolButton_clicked();
42 |
43 | void on_showChanneltoolButton_clicked();
44 |
45 | void channelChangedSlot(CHANNEL_INFO channel);
46 | void on_nexttoolButton_clicked();
47 |
48 | void on_prevtoolButton_clicked();
49 |
50 | void pauseSlot(bool pause);
51 | void on_downloadtoolButton_clicked();
52 |
53 | private:
54 | Ui::Widget *ui;
55 | void closeEvent(QCloseEvent *event);
56 |
57 |
58 | private:
59 | QMediaPlayer *m_pPlayer;
60 | LoginDlg *m_userLonIndlg;
61 | CHANNEL_INFO m_currentChannelId;
62 | ChannelsWidget *m_channelWidget;
63 | QList m_songIdList;
64 | int m_iCurrentSongIndex;
65 | SONG_INFO m_currentSongInfo;
66 |
67 | QNetworkCookieJar *m_cookJar;
68 | void play(int index);
69 | void nextSong();
70 | void prevSong();
71 | void initSongIdList();
72 | void mediaStatusChanged(QMediaPlayer::MediaStatus status);
73 | void positionChanged(qint64 position);
74 | void durationChanged(qint64 duration);
75 | void setPosition(qint64 position);
76 | void volChannged(qint64 position);
77 |
78 | signals:
79 | void channelInfoSignal(QString channel);
80 | private slots:
81 | void errorOccur(QMediaPlayer::Error);
82 | };
83 |
84 | #endif // WIDGET_H
85 |
86 |
87 |
--------------------------------------------------------------------------------
/widget.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Widget
4 |
5 |
6 |
7 | 0
8 | 0
9 | 315
10 | 583
11 |
12 |
13 |
14 |
15 | 0
16 | 0
17 |
18 |
19 |
20 | Qt::NoContextMenu
21 |
22 |
23 | QBaiduFm
24 |
25 |
26 | 1.000000000000000
27 |
28 |
29 |
30 | 9
31 |
32 |
33 | 9
34 |
35 |
36 | 9
37 |
38 |
39 | 9
40 |
41 |
42 | 9
43 |
44 | -
45 |
46 |
47 | 0
48 |
49 |
-
50 |
51 |
52 |
53 | 200
54 | 220
55 |
56 |
57 |
58 |
59 | 200
60 | 220
61 |
62 |
63 |
64 | true
65 |
66 |
67 |
68 | -
69 |
70 |
71 |
72 | 0
73 | 0
74 |
75 |
76 |
77 |
78 | 200
79 | 240
80 |
81 |
82 |
83 |
84 | 200
85 | 240
86 |
87 |
88 |
89 |
90 | -
91 |
92 |
93 |
94 | 240
95 | 21
96 |
97 |
98 |
99 | Qt::Horizontal
100 |
101 |
102 |
103 | -
104 |
105 |
106 |
107 | 9
108 |
109 |
110 | 9
111 |
112 |
113 | 9
114 |
115 |
116 | 9
117 |
118 |
119 | 9
120 |
121 |
-
122 |
123 |
124 |
125 | 16777215
126 | 40
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 | :/img/backward.svg
135 |
136 |
137 |
138 |
139 | 40
140 | 40
141 |
142 |
143 |
144 |
145 | -
146 |
147 |
148 |
149 | 16777215
150 | 40
151 |
152 |
153 |
154 | Next
155 |
156 |
157 |
158 |
159 |
160 |
161 | :/img/forward.svg
162 |
163 |
164 |
165 |
166 | 40
167 | 40
168 |
169 |
170 |
171 |
172 | -
173 |
174 |
175 |
176 | 16777215
177 | 40
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 | :/img/downLoad.png:/img/downLoad.png
186 |
187 |
188 |
189 | 40
190 | 40
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 | -
201 |
202 |
203 |
204 | 0
205 |
206 |
207 | 0
208 |
209 |
210 | 0
211 |
212 |
213 | 0
214 |
215 |
216 | 0
217 |
218 |
-
219 |
220 |
221 | Qt::Vertical
222 |
223 |
224 |
225 | 20
226 | 40
227 |
228 |
229 |
230 |
231 | -
232 |
233 |
234 | 登录百度
235 |
236 |
237 | 0
238 |
239 |
240 | Login
241 |
242 |
243 |
244 |
245 |
246 |
247 | :/img/setting.png:/img/setting.png
248 |
249 |
250 |
251 | -
252 |
253 |
254 |
255 |
256 |
257 |
258 | :/img/lrc.svg
259 |
260 |
261 |
262 |
263 | -
264 |
265 |
266 |
267 |
268 |
269 |
270 | :/img/volume.png:/img/volume.png
271 |
272 |
273 |
274 | -
275 |
276 |
277 |
278 | 29
279 | 90
280 |
281 |
282 |
283 | Qt::Vertical
284 |
285 |
286 |
287 | -
288 |
289 |
290 | Qt::Vertical
291 |
292 |
293 |
294 | 20
295 | 40
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 | -
304 |
305 |
306 |
307 | 0
308 | 0
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 | AristPicture
319 | QWidget
320 |
321 | 1
322 |
323 |
324 | Lyrics
325 | QWidget
326 |
327 | 1
328 |
329 |
330 | volPannel
331 | QSlider
332 |
333 |
334 |
335 | ChannelsWidget
336 | QWidget
337 |
338 | 1
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
--------------------------------------------------------------------------------