-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmymaintablewidget.cpp
More file actions
310 lines (283 loc) · 10.6 KB
/
mymaintablewidget.cpp
File metadata and controls
310 lines (283 loc) · 10.6 KB
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
#include "mymaintablewidget.h"
#include<QModelIndex>
#include<QHeaderView>
#include<QDebug>
#include<QMouseEvent>
#include<QEvent>
#include<QGraphicsOpacityEffect>
#include<QScrollBar>
#include<QTime>
#include<QObject>
mymaintablewidget::mymaintablewidget(QWidget *parent): QTableWidget(parent)
{
this->setMouseTracking(true);
kgmousemove=true;
plist=new QMediaPlaylist;
previousitem=-1;
setFrameShadow(QFrame::Plain);//设置平的样式
setFrameShape(QFrame::NoFrame);//设置无边样式
setFocusPolicy(Qt::NoFocus);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//水平scrollbar禁用
setShowGrid(false);//隐藏线
this->horizontalHeader()->setVisible(false);
this->verticalHeader()->setVisible(false);
setEditTriggers(QTableWidget::NoEditTriggers);
setSelectionBehavior (QAbstractItemView::SelectRows);
setSelectionMode (QAbstractItemView::SingleSelection);
setAcceptDrops(true);
setGeometry(55,132,194,444);
setContextMenuPolicy(Qt::CustomContextMenu);
this->insertColumn(0);
this->insertColumn(1);
this->horizontalHeader()->resizeSection(0,360);
this->horizontalHeader()->setStretchLastSection(true);
this->setStyleSheet("QTableWidget{background-color:rgb(255, 255, 255,150);}"
"QTableWidget{font-size : 12px;color: rgb(55, 55, 55);}"
"QTableWidget{selection-background-color: rgb(25,65,65,150);padding: -1;}"
"QTableWidget{selection-color: rgb(255, 255, 255);}");
QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;
this->verticalScrollBar()->setGraphicsEffect(opacityEffect);
opacityEffect->setOpacity(0.5);
QScrollBar *vbar=this->verticalScrollBar();
vbar->setContextMenuPolicy(Qt::NoContextMenu);//"QScrollBar::handle{}"
//
vbar->setStyleSheet("QScrollBar{background:white; width: 10px;margin: 10px 0 10px 0;}"
"QScrollBar::handle{background:light gray;border-radius:5px;}"
"QScrollBar::handle:hover{background: rgb(55,55,55);}"
"QScrollBar::add-line:vertical {background:black; border-image: url(:/image/down.png); height: 10px; subcontrol-position: bottom;subcontrol-origin: margin;}"
"QScrollBar::sub-line:vertical {background:black; border-image: url(:/image/top.png);height: 10px;subcontrol-position: top;subcontrol-origin: margin;}"
"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {background:white;}");
connect(this,SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),this,SLOT(currentitemch(QTableWidgetItem*,QTableWidgetItem*)));
connect(this,SIGNAL(cellEntered(int,int)),this,SLOT(listentered(int,int)));
mysetPlaybackMode(0);
}
mymaintablewidget::mymaintablewidget(bool kg)
{
kgmousemove=kg;
setMouseTracking(true);
setFrameShadow(QFrame::Plain);//设置平的样式
setFrameShape(QFrame::NoFrame);//设置无边样式
setFocusPolicy(Qt::NoFocus);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//水平scrollbar禁用
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//垂直scrollbar禁用
setShowGrid(false);//隐藏线
verticalHeader()->setVisible(false);//设置不可见
setEditTriggers(QTableWidget::NoEditTriggers);//不可编辑
setSelectionBehavior ( QAbstractItemView::SelectRows); //设置选择行为,以行为单位
setSelectionMode ( QAbstractItemView::NoSelection);//单选
horizontalHeader()->setHighlightSections(false);//不能鼠标点击
setStyleSheet("QTableWidget{background-color:rgb(255, 255, 255,100);}"
"QTableWidget{font-size : 12px;color: rgb(65, 65, 65);}"
"QTableWidget::item:hover{color: red;}");//background-color:rgb(242, 242, 242);// "QTableWidget{selection-background-color: rgb(233,233,233);}"
insertColumn(0);
insertColumn(1);
insertColumn(2);
QStringList list;
list<<" 歌曲"<<" 歌手"<<"操作";
setHorizontalHeaderLabels(list);
QHeaderView *header=this->horizontalHeader();//调整大小
header->setStyleSheet("QHeaderView::section{background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgb(46,46,46),stop:1 rgb(66,66,66));color: rgb(210,210,210);border: 1px solid #383838;}");//
header->resizeSection(0,180);
header->resizeSection(1,180);
header->setStretchLastSection(true);//延展最一个表头
header->setSectionResizeMode(QHeaderView::Fixed);//不能更改列宽
this->horizontalHeaderItem(0)->setTextAlignment(Qt::AlignLeft);//第一列表头对齐方式
this->horizontalHeaderItem(1)->setTextAlignment(Qt::AlignLeft);//第2列表头位置方式
}
void mymaintablewidget::listentered(int row, int column)
{
qDebug()<<row<<column;
}
void mymaintablewidget::currentitemch(QTableWidgetItem*,QTableWidgetItem*)//用于当前选择项为白字黑底
{
}
void mymaintablewidget::mouseMoveEvent(QMouseEvent *)
{
if(!kgmousemove)//如果开关为false
return;
QTableWidgetItem *itemss=this->item(previousitem,0);
QModelIndex index= this->indexAt(this->mapFromGlobal(QCursor::pos()));
int nowrow=index.row();
if(itemss!=Q_NULLPTR)
{
this->item(previousitem,0)->setBackgroundColor(Qt::transparent);
this->item(previousitem,1)->setBackgroundColor(Qt::transparent);
}
if(this->itemAt(this->mapFromGlobal(QCursor::pos()))!=NULL&&nowrow!=currentRow())
{
this->item(nowrow,0)->setBackgroundColor(QColor(25,65,65,50));
this->item(nowrow,1)->setBackgroundColor(QColor(25,65,65,50));
previousitem=nowrow;
}
}
void mymaintablewidget::leaveEvent(QEvent *)
{
QTableWidgetItem *itemss=this->item(previousitem,0);
if(itemss!=Q_NULLPTR)//如果itemss不为空
{
this->item(previousitem,0)->setBackgroundColor(Qt::transparent);
this->item(previousitem,1)->setBackgroundColor(Qt::transparent);
}
}
QUrl mymaintablewidget::myCurrentMedia()
{
return plist->media(nowindex).canonicalUrl();
}
void mymaintablewidget::mysetCurrentMedia(int nowsong)
{
nowindex=nowsong;
}
void mymaintablewidget::mysetPlaybackMode(int mode)//0是列表1是单曲2是随机
{
nowmode=mode;
}
void mymaintablewidget::mysetnext()
{
if(nowmode==0)//顺序列表播放到尾巴上 从头再来
{
if(nowindex==plist->mediaCount()-1)
{
nowindex=0;
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
return;
}
nowindex+=1;
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
}
if(nowmode==1)//单曲循环
{
return;
}
if(nowmode==2)//随机播放
{
QTime time;
time= QTime::currentTime();
qsrand(time.msec()+time.second()*1000);
int xxx=qrand()%plist->mediaCount();
nowindex=xxx;
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
}
}
void mymaintablewidget::mysetprevious()
{
if(nowmode==0)//顺序列表播放头上再按上一曲, 从头播放第一首
{
if(nowindex==0)
{
nowindex=0;
return;
}
nowindex-=1;
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
}
if(nowmode==1)//单曲循环
{
return;
}
if(nowmode==2)//随机播放
{
QTime time;
time= QTime::currentTime();
qsrand(time.msec()+time.second()*1000);
int xxx=qrand()%plist->mediaCount();
nowindex=xxx;
this->setCurrentCell(nowindex,0);
}
}
void mymaintablewidget::mydelitem(int index)
{
if(index<nowindex)
{
plist->removeMedia(index);
nowindex--;//当前播放的歌曲变成null
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
return;
}
if(index==nowindex)
{
plist->removeMedia(index);
nowindex++;
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
return;
}
if(index>nowindex)
{
plist->removeMedia(index);
QTableWidgetItem *item= this->item(nowindex,0);
this->setCurrentItem(item);
return;
}
}
void mymaintablewidget::myitemup(int index){
//对当前播放歌曲的操作
if(index == nowindex){
QMediaContent content = plist->media(index-1);//暂存选定项对应的歌曲
plist->removeMedia(index-1);//删除选定歌曲
nowindex-=1;
plist->insertMedia(index,content);//在原选定项上一项的上方插入原选定歌曲
//光标跟随
QTableWidgetItem * ptr = this->item((index-1),0);
this->setCurrentItem(ptr);
return;
}
else{
//同上操作
QMediaContent content = plist->media(index);
plist->removeMedia(index);
plist->insertMedia((index-1),content);
if(index == (nowindex +1)){ //与当前播放歌曲交换后,继续播放原播放歌曲
nowindex+=1;
}
//光标跟随
QTableWidgetItem * ptr = this->item((index-1),0);
this->setCurrentItem(ptr);
return;
}
}
/*下调操作与上调操作同理
*index不适用于列表最后一项*/
void mymaintablewidget::myitemdown(int index){
if(index == nowindex){
QMediaContent content = plist->media(index+1);
plist->removeMedia(index+1);
plist->insertMedia(index,content);
nowindex+=1;
QTableWidgetItem * ptr = this->item((index+1),0);
this->setCurrentItem(ptr);
return;
}
else{
QMediaContent content = plist->media(index);
plist->removeMedia(index);
plist->insertMedia((index+1),content);
if((index+1) == nowindex){
nowindex-=1;
}
QTableWidgetItem * ptr = this->item((index+1),0);
this->setCurrentItem(ptr);
return;
}
}
void mymaintablewidget::changeRowItem(int row_Up, int row_Down){
//暂存需要交换的两行内容
QTableWidgetItem * item11 = this->item(row_Up,0);
QTableWidgetItem * item12 = this->item(row_Up,1);
QTableWidgetItem * item21 = this->item(row_Down,0);
QTableWidgetItem * item22 = this->item(row_Down,1);
//删除原有内容但保留行
for (int i=0; i<2; i++){
this->takeItem(row_Up,i);
this->takeItem(row_Down,i);
}
//两行内容交换存入
this->setItem(row_Up,0,item21);
this->setItem(row_Up,1,item22);
this->setItem(row_Down,0,item11);
this->setItem(row_Down,1,item12);
}