-
Notifications
You must be signed in to change notification settings - Fork 0
/
secframe.cpp
385 lines (319 loc) · 12.2 KB
/
secframe.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
#include "secframe.h"
SecFrame::SecFrame(QWidget *parent)
: QFrame(parent)
{
//设置它的透明度
setWindowOpacity(0.8);
//设置鼠标捕捉
//setMouseTracking(true);
//主布局
secMainLayout = new QHBoxLayout(this);
/******************************************************************************/
//第一个小布局上的按钮实现
musicListBtn = new QPushButton;
musicListBtn->setFlat(true);
musicListBtn->setFixedSize(50, 50);
musicListBtn->setIcon(QPixmap(":/images/musicListIcon.png"));
musicListBtn->setIconSize(QPixmap(":/images/musicListIcon.png").size());
musicListBtn->setToolTip(tr("音乐列表"));
favoriteBtn = new QPushButton;
favoriteBtn->setFlat(true);
favoriteBtn->setFixedSize(50, 50);
favoriteBtn->setIcon(QPixmap(":/images/favoriteIcon.png"));
favoriteBtn->setIconSize(QPixmap(":/images/favoriteIcon.png").size());
favoriteBtn->setToolTip(tr("我的收藏"));
// fmBtn = new QPushButton;
// fmBtn->setFlat(true);
// //fmBtn->setFixedSize(50, 50);
// fmBtn->setIcon(QPixmap(":/images/fmBtn.png"));
// fmBtn->setIconSize(QPixmap(":/images/fmBtn.png").size());
// //fmBtn->setContentsMargins(0, 0, 0, 0);
mobileBtn = new QPushButton;
mobileBtn->setFlat(true);
mobileBtn->setFixedSize(50, 50);
mobileBtn->setIcon(QPixmap(":/images/mobileIcon.png"));
mobileBtn->setIconSize(QPixmap(":/images/mobileIcon.png").size());
mobileBtn->setToolTip(tr("手机管理"));
downloadBtn2 = new QPushButton;
downloadBtn2->setFlat(true);
downloadBtn2->setIcon(QPixmap(":/images/downloadIcon.png"));
downloadBtn2->setIconSize(QPixmap(":/images/downloadIcon.png").size());
downloadBtn2->setFixedSize(50, 50);
downloadBtn2->setToolTip(tr("下载"));
moreBtn = new QPushButton;
moreBtn->setFlat(true);
moreBtn->setFixedSize(50, 50);
moreBtn->setIcon(QPixmap(":/images/moreIcon.png"));
moreBtn->setIconSize(QPixmap(":/images/moreIcon.png").size());
moreBtn->setToolTip(tr("更多"));
packUpBtn = new QPushButton;
packUpBtn->setFlat(true);
packUpBtn->setFixedSize(50, 50);
packUpBtn->setIcon(QPixmap(":/images/packup.png"));
packUpBtn->setIconSize(QPixmap(":/images/packup.png").size());
packUpBtn->setToolTip(tr("收起列表"));
//添加上面这些按钮的事件关联,是的当点击按钮时,能够切换到相应的窗体
//音乐列表按钮与堆栈窗体的第一个窗体管理
connect(musicListBtn, SIGNAL(clicked()), this, SLOT(on_musicListBtn_clicked()));
connect(favoriteBtn, SIGNAL(clicked()), this, SLOT(on_favoriteBtn_clicked()));
connect(mobileBtn, SIGNAL(clicked()), this, SLOT(on_mobileBtn_clicked()));
connect(downloadBtn2, SIGNAL(clicked()), this, SLOT(on_downloadBtn_clicked()));
connect(moreBtn, SIGNAL(clicked()), this, SLOT(on_moreBtn_clicked()));
connect(packUpBtn, SIGNAL(clicked()), this, SLOT(on_packUpBtn_clicked()));
/***************************************************************************/
//第一个小布局的布局QVBoxLayout
secVLayout = new QVBoxLayout;
//secVLayout->addWidget(secList);
secVLayout->setSpacing(0);
secVLayout->setMargin(0);
//secVLayout->setSizeConstraint(QLayout::SetFixedSize);
secVLayout->addWidget(musicListBtn);
secVLayout->addWidget(favoriteBtn);
//secVLayout->addWidget(fmBtn);
secVLayout->addWidget(mobileBtn);
secVLayout->addWidget(downloadBtn2);
secVLayout->addWidget(moreBtn);
secVLayout->addWidget(packUpBtn);
secVLayout->addStretch();
//secVLayout->setGeometry(QRect(QPoint(40, 40), QSize(40, this->geometry().height())));
/****************************************************************************/
//创建第二个小布局的QStackedWidget
secStack = new QStackedWidget;
//设置固定宽度
secStack->setFixedWidth(300);
//设置堆栈窗口的风格
//secStacke->setFrameStyle(QFrame::Panel);
//创建第二个小布局的元素并添加上去
muList = new MusicList();
faList = new FavoriteList();
mobileWidget = new MobileManage();
downloadWidget = new Download();
moreWidget = new More();
puWidget = new packUpWidget();
secStack->addWidget(muList);
secStack->addWidget(faList);
secStack->addWidget(mobileWidget);
secStack->addWidget(downloadWidget);
secStack->addWidget(moreWidget);
secStack->addWidget(puWidget);
//将六个小窗体发送过来的可以播放的信号,传递给顶层的窗体
connect(muList, SIGNAL(fromMusicListToSecFrame(SingleMusic*, bool)),
this, SLOT(OkSendToTop(SingleMusic *, bool)));
connect(faList, SIGNAL(fromFavoriteToSecFrame(SingleMusic*, bool)),
this, SLOT(OkSendToTop(SingleMusic *, bool)));
/******************************************************************************/
//创建第三个小布局,也即搜索显示窗口那部分
downloadDisplay = new DisplayWidget();
//连接displaywidget的发送的播放歌曲的信号
connect(downloadDisplay, SIGNAL(DWplayMusic(SingleMusic*,bool)),
this, SLOT(OkSendToTop(SingleMusic*, bool)));
//当有搜索结果时,就通知是否显示搜索结果页面
connect(downloadDisplay, SIGNAL(okToShow(bool)),
this, SLOT(okToShowDownload(bool)));
//当单击了添加按钮之后,要将相应的歌曲添加到favorite窗体中的“试听音乐”列表中
connect(downloadDisplay, SIGNAL(addThisMusicToListDis(SingleMusic*)),
this, SLOT(addToFavoriteList(SingleMusic*)));
//当没有搜索时,这个窗体时隐藏的,只有当有搜索结果时才显示出来
downloadDisplay->hide();
//空窗体,有第三小布局(也即搜索结果)时就隐藏,其他视乎就显示
emptyWidget = new QWidget;
emptyLayout = new QHBoxLayout(emptyWidget);
emptyLayout->addStretch();
//歌词显示窗体
lyricWidget = new LyricWidget();
//测试用,有歌词窗体之后就隐藏掉空窗体,
//之后要修改完整,使得歌词窗体与搜索窗体进行切换
emptyWidget->hide();
/*****************************************************************************/
//对主布局的完成
secMainLayout->setMargin(0);
secMainLayout->setSpacing(0);
//添加第一个小布局
secMainLayout->addLayout(secVLayout);
//添加第二个小布局
secMainLayout->addWidget(secStack);
//添加第三个小布局
secMainLayout->addWidget(downloadDisplay);
secMainLayout->addWidget(emptyWidget);
//添加歌词窗体
secMainLayout->addWidget(lyricWidget);
//secMainLayout->setStretch(0);
}
/*对于播放列表与收藏列表之间的切换是这样实现的:
* 自定义了槽函数,当鼠标单击第一列中的按钮时,按钮的clicked()信号会连接上自定义的槽函数,
* 而这个槽函数的实现内容就是令堆栈窗口重新设置当前索引,使得切换到按钮对应的那个窗口上
*/
void SecFrame::on_favoriteBtn_clicked()
{
secStack->show();
emit secStack->setCurrentIndex(1);
}
void SecFrame::on_musicListBtn_clicked()
{
secStack->show();
emit secStack->setCurrentIndex(0);
}
void SecFrame::on_mobileBtn_clicked()
{
secStack->show();
emit secStack->setCurrentIndex(2);
//测试用,显示歌词窗体,之后删除
showLyric();
}
void SecFrame::on_downloadBtn_clicked()
{
secStack->show();
emit secStack->setCurrentIndex(3);
//测试用,显示搜索结果,之后删除
showDisplay();
}
void SecFrame::on_moreBtn_clicked()
{
secStack->show();
emit secStack->setCurrentIndex(4);
}
void SecFrame::on_packUpBtn_clicked()
{
emit secStack->setCurrentIndex(5);
//连第二小布局都隐藏
secStack->hide();
//显示空窗体
//showEmpty();
//测试下全屏显示歌词
showLyric();
// //显示或隐藏空窗体及搜索结果显示窗体
// closeDisplayWidget();
}
//接收从六个小窗体传递过来的可以播放信号,但这里要控制住,使得只能播放一首歌曲
void SecFrame::OkSendToTop(SingleMusic *sFmusic, bool bOk)
{
OnlyMusic = sFmusic;
//判断是从哪个界面传递过来的歌曲,选择性地进行播放,但试听界面的歌曲与本地音乐的播放
//矛盾是在Widget窗体中解决的,增加了一个PreplayOrpauseMusic()函数来控制播放的唯一性!
whichInterface();
//将播放歌曲传递给最顶层的窗体
emit SendToTop(OnlyMusic);
}
//显示或隐藏空窗体及搜索结果显示窗体
//void SecFrame::closeDisplayWidget()
//{
// if(!okToShowDownloadBool)
// {
// //如果没有搜索,则不管怎样都是要显示空窗体的
// emptyWidget->show();
// }
// else
// {
// //如果有搜索结果了,则要看点击按钮的情况,
// if(okToShowEmptyWidget)
// {
// //如果允许你空窗体显示就显示空窗体,隐藏搜索结果窗体
// emptyWidget->show();
// downloadDisplay->hide();
// //同时设置下次就隐藏空窗体,显示搜索结果窗体
// okToShowEmptyWidget = false;
// }
// else
// {
// //如果不允许空窗体显示,就隐藏空窗体,显示搜索窗体
// emptyWidget->hide();
// downloadDisplay->show();
// //同时设置下次就可以显示空窗体了
// okToShowEmptyWidget = true;
// }
// }
//}
void SecFrame::okToShowDownload(bool )
{
// okToShowDownloadBool = true;
// //显示搜索结果的窗体
// downloadDisplay->show();
// //同时也要将空窗体隐藏
// emptyWidget->hide();
showDisplay();
}
void SecFrame::whichInterface()
{
//emit closePrevMusic();
//首先判断是从试听列表还是从本地音乐列表中传递过来的音乐
if(!downloadDisplay->DWoktoplay)
{
//不是从试听界面传递过来的音乐
//通过控制当前选中的索引号来控制另外一个窗体的所欲列表音乐都关闭
if(secStack->currentIndex() == 0)
faList->closeAllFavoriteList();
else if(secStack->currentIndex() == 1)
muList->closeAllMusicList();
else
{
} //什么都不做
}
else
{
//如果是从试听界面传递过来的歌曲,则关闭所有本地音乐的播放
faList->closeAllFavoriteList();
muList->closeAllMusicList();
}
}
//单击了添加按钮后,将相应的歌曲添加到favoritelist中的“试听音乐”列表中
void SecFrame::addToFavoriteList(SingleMusic *addmus)
{
faList->addMusicToList(addmus);
}
//只显示空窗体、歌词窗体、搜索显示窗体中的唯一个窗体
void SecFrame::showOnlyOneWidget()
{
if(okToShowEmptyWidget)
{
//如果空窗体能够显示,则其它两个窗体就要关闭
emptyWidget->show();
downloadDisplay->hide();
lyricWidget->hide();
okToShowDownloadBool = false;
okToShowLyric = false;
}
else
{
//如果空窗体没有显示,则显示剩下两个窗体中的一个
if(okToShowDownloadBool)
{
//如果搜索结果窗体能够显示,则另两个窗体要关闭
downloadDisplay->show();
emptyWidget->hide();
lyricWidget->hide();
okToShowLyric = false;
}
else
{
//如果空窗体没有显示则显示歌词窗体,关闭其它两个窗体
lyricWidget->show();
downloadDisplay->hide();
emptyWidget->hide();
okToShowLyric = true;
}
}
}
//只显示歌词窗体
void SecFrame::showLyric()
{
okToShowLyric = true;
okToShowEmptyWidget = false;
okToShowDownloadBool = false;
showOnlyOneWidget();
}
//只显示搜索结果窗体
void SecFrame::showDisplay()
{
okToShowDownloadBool = true;
okToShowEmptyWidget = false;
okToShowLyric = false;
showOnlyOneWidget();
}
//只显示空窗体
void SecFrame::showEmpty()
{
okToShowEmptyWidget = true;
okToShowDownloadBool = false;
okToShowLyric = false;
showOnlyOneWidget();
}