#ifndef MYMP3_H
#define MYMP3_H
#include
#include
#include "mywidget.h"
#include "tabdialog.h"
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
class Mymp3 : public QWidget
{
Q_OBJECT
public:
Mymp3(QWidget *parent = 0);
~Mymp3();
private:
tabDialog *tab;
QGroupBox *groupBox;
QPushButton *picBtn; //ͼƬ
QLabel *bottmpic;
QLabel *songnameLabel; //
QSlider *timeSlider; //ʱ
QLCDNumber *timeLed;
QPushButton *lastBtn;
QPushButton *playBtn;
QPushButton *nextBtn;
audioBtn *audiobtn;
audioSlider *audioslider;
QHBoxLayout *H2;
int time; //ʱ
int cur_time; //ǰʱ
QTimer *timer; //ѭʱ
int state; //״̬־1Ϊ 2Ϊͣ 0Ϊʼ״̬
bool audio_bool; //־trueΪ falseΪ
int music_time(QString); //ʱ
public slots:
void lastBtn_slot(); //һ
void playBtn_slot();//šͣ
void nextBtn_slot(); //һ
void set_audio(int value); //
void audioslider_show(); //ʾ
void audioslider_Hidden(); //
void set_time(); //ʾʱ
void audioBtn_slot();
void play_music_slot(QString);
signals:
void change_music(QString);
};
#endif // MYMP3_H
#include "mymp3.h"
#include
using namespace std;
Mymp3::Mymp3(QWidget *parent) :
QWidget(parent)
{
setWindowTitle("QQMusic");
setWindowIcon(QIcon("./image/logo.png"));
setAutoFillBackground(true);
QPalette mainpalette=this->palette();
mainpalette.setBrush(QPalette::Window,QBrush(QPixmap("./image/backgroud.png").scaled(this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));
this->setPalette(mainpalette);
QIcon icon;
picBtn=new QPushButton;
QPixmap picpix("./image/pic.png");
picpix.scaled(QSize(80,80),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
icon.addPixmap(picpix);
picBtn->setIcon(icon);
picBtn->setFixedSize(picpix.size());
picBtn->setIconSize(QSize(80,80));
picBtn->setMask(picpix.mask());
songnameLabel=new QLabel("jksdfkjsadbjfsbdf");
timeSlider=new QSlider(Qt::Horizontal);
timeLed=new QLCDNumber();
timeLed->setSegmentStyle(QLCDNumber::Flat);
timeLed->setFrameShape(QFrame::NoFrame);
QPalette p=timeLed->palette();
p.setColor(QPalette::Normal,QPalette::WindowText,QColor(Qt::lightGray));
timeLed->setPalette(p);
QHBoxLayout *H=new QHBoxLayout();
H->addWidget(timeSlider);
H->addWidget(timeLed);
lastBtn=new QPushButton();
QPixmap lastpix("./image/last.png");
icon.addPixmap(lastpix);
lastBtn->setIcon(icon);
lastBtn->setIconSize(QSize(30,26));
lastBtn->setFixedSize(lastpix.size());
lastBtn->setMask(lastpix.mask());
playBtn=new QPushButton();
QPixmap playpix("./image/play.png");
icon.addPixmap(playpix);
playBtn->setIcon(icon);
playBtn->setIconSize(QSize(30,26));
playBtn->setFixedSize(playpix.size());
playBtn->setMask(playpix.mask());
nextBtn=new QPushButton();
QPixmap nextpix("./image/next.png");
icon.addPixmap(nextpix);
nextBtn->setIcon(icon);
nextBtn->setIconSize(QSize(30,26));
nextBtn->setFixedSize(nextpix.size());
nextBtn->setMask(nextpix.mask());
audiobtn=new audioBtn();
QPixmap audiopix("./image/audio.png");
icon.addPixmap(audiopix);
audiobtn->setIcon(icon);
audiobtn->setIconSize(QSize(30,26));
audiobtn->setFixedSize(audiopix.size());
audiobtn->setMask(audiopix.mask());
bottmpic=new QLabel(this);
QPixmap bottmpix("./image/bottm.png");
bottmpic->setPixmap(bottmpix);
bottmpic->setGeometry(QRect(0,370,300,130));
audioslider=new audioSlider(Qt::Horizontal);
audioslider->setRange(0,100);
audioslider->setHidden(false);
H2=new QHBoxLayout();
H2->addWidget(lastBtn);
H2->addWidget(playBtn);
H2->addWidget(nextBtn);
H2->addWidget(audiobtn);
H2->addWidget(audioslider);
H2->setSpacing(1);
QVBoxLayout *v=new QVBoxLayout();
v->addWidget(songnameLabel);
v->addLayout(H);
v->addLayout(H2);
v->setSpacing(3);
tab=new tabDialog;
QGridLayout *top_H=new QGridLayout();
top_H->addWidget(picBtn,0,0);
top_H->addLayout(v,0,1);
//tab->setGeometry(QRect(10,100,280,600));
top_H->addWidget(tab,1,0,1,2);
setLayout(top_H);
timeLed->display("00:00");
set_audio(50);
audio_bool=false;
timer=new QTimer(this);
connect(audiobtn,SIGNAL(mouseEnter()),this,SLOT(audioslider_show()));
connect(audiobtn,SIGNAL(mouseLeave()),this,SLOT(audioslider_Hidden()));
connect(audioslider,SIGNAL(mouseenter()),this,SLOT(audioslider_show()));
connect(audioslider,SIGNAL(mouseleave()),this,SLOT(audioslider_Hidden()));
connect(tab->historyMusic_widget,SIGNAL(change_music(QString)),this,SLOT(play_music_slot(QString)));
connect(tab->myMusic_widget->stack,SIGNAL(change_music(QString)),this,SLOT(play_music_slot(QString)));
connect(this,SIGNAL(change_music(QString)),this,SLOT(play_music_slot(QString)));
connect(timer,SIGNAL(timeout()),this,SLOT(set_time()));
connect(audioslider,SIGNAL(valueChanged(int)),this,SLOT(set_audio(int)));
connect(lastBtn,SIGNAL(clicked()),this,SLOT(lastBtn_slot()));
connect(nextBtn,SIGNAL(clicked()),this,SLOT(nextBtn_slot()));
connect(playBtn,SIGNAL(clicked()),this,SLOT(playBtn_slot()));
connect(audiobtn,SIGNAL(clicked()),this,SLOT(audioBtn_slot()));
system("killall -9 madplay");
state=0;
}
Mymp3::~Mymp3()
{
system("killall -9 madplay");
}
void Mymp3::audioslider_show()
{
audioslider->setHidden(false);
setFocusProxy(audioslider);
}
void Mymp3::audioslider_Hidden()
{
audioslider->setHidden(true);
H2->addStretch();
}
void Mymp3::lastBtn_slot()
{
system("killall -9 madplay");
int i=tab->myMusic_widget->stack->stack->currentIndex();
cout<<"i="<myMusic_widget->stack->list1->currentRow()==0)
{
tab->myMusic_widget->stack->list1->setCurrentRow(tab->myMusic_widget->stack->list1->count()-1);
emit change_music(tab->myMusic_widget->stack->filenamelist1[tab->myMusic_widget->stack->list1->currentRow()]);
}
else
{
tab->myMusic_widget->stack->list1->setCurrentRow(tab->myMusic_widget->stack->list1->currentRow()-1);
emit change_music(tab->myMusic_widget->stack->filenamelist1[tab->myMusic_widget->stack->list1->currentRow()]);
}
}
else
{
if(tab->myMusic_widget->stack->list2->currentRow()==0)
{
tab->myMusic_widget->stack->list2->setCurrentRow(tab->myMusic_widget->stack->list2->count()-1);
emit change_music(tab->myMusic_widget->stack->filenamelist2[tab->myMusic_widget->stack->list1->currentRow()]);
}
else
{
tab->myMusic_widget->stack->list2->setCurrentRow(tab->myMusic_widget->stack->list2->currentRow()-1);
emit change_music(tab->myMusic_widget->stack->filenamelist2[tab->myMusic_widget->stack->list2->currentRow()]);
}
}
}
void Mymp3::playBtn_slot()
{
QIcon icon;
if(state==1)
{
system("killall -STOP madplay &");
QPixmap playpix("./image/stop.png");
icon.addPixmap(playpix);
playBtn->setIcon(playpix);
timer->stop();
delete timer;
state=2;
}
else if(state==2)
{
system("killall -CONT madplay &");
QPixmap playpix("./image/play.png");
icon.addPixmap(playpix);
playBtn->setIcon(playpix);
timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(set_time()));
timer->start(1000);
state=1;
}
else if(state==0)
{
emit change_music(tab->myMusic_widget->stack->filenamelist1[0]);
tab->myMusic_widget->stack->list1->setCurrentRow(0);
}
}
void Mymp3::play_music_slot(QString music_filename)
{
state=1;
timeLed->display("00:00");
system("killall -9 madplay");
int pid;
delete timer;
time=music_time(music_filename);
timeSlider->setRange(0,time);
songnameLabel->setText(music_filename.section("/",-1));
cur_time=0;
timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(set_time()));
timer->start(1000);
pid=fork();
if(pid==0)
{
execlp("madplay","madplay","-v",music_filename.toLocal8Bit().data(),"&",NULL);
}
}
void Mymp3::set_time()
{
QTime t(0,0,0);
QTime t_t=t.addSecs(cur_time);
QString str_time=t_t.toString("mm:ss");
timeLed->display(str_time);
timeSlider->setValue(cur_time);
cur_time++;
if(cur_time>time+2)
nextBtn_slot();
}
void Mymp3::nextBtn_slot()
{
system("killall -9 madplay");
int i=tab->myMusic_widget->stack->stack->currentIndex();
if(i==0)
{
if(tab->myMusic_widget->stack->list1->currentRow()==(tab->myMusic_widget->stack->list1->count()-1))
{
tab->myMusic_widget->stack->list1->setCurrentRow(0);
emit change_music(tab->myMusic_widget->stack->filenamelist1[0]);
}
else
{
tab->myMusic_widget->stack->list1->setCurrentRow(tab->myMusic_widget->stack->list1->currentRow()+1);
emit change_music(tab->myMusic_widget->stack->filenamelist1[tab->myMusic_widget->stack->list1->currentRow()]);
}
}
else
{
if(tab->myMusic_widget->stack->list2->currentRow()==(tab->myMusic_widget->stack->list2->count()-1))
{
tab->myMusic_widget->stack->list2->setCurrentRow(0);
emit change_music(tab->myMusic_widget->stack->filenamelist2[0]);
}
else
{
tab->myMusic_widget->stack->list2->setCurrentRow(tab->myMusic_widget->stack->list2->currentRow()+1);
emit change_music(tab->myMusic_widget->stack->filenamelist2[tab->myMusic_widget->stack->list2->currentRow()]);
}
}
}
int Mymp3::music_time(QString music_filename)
{
int time;
int end_pos;
int rate=0;
int Frame_head;
char data_Frame[4];
ifstream in(music_filename.toLatin1().data(),ios::binary);
in.seekg(0,ios::end);
end_pos=in.tellg();
in.seekg(0,ios::beg);
in.read((char*)&Frame_head,(sizeof(int)));
in.close();
sprintf(data_Frame,"%x",Frame_head);
switch(data_Frame[2]+1)
{
case '6':
rate=192;
break;
case '4':
rate=128;
break;
case '8':
rate=256;
break;
case 'a':
rate=320;
break;
case '3':
rate=96;
break;
case '7':
rate=224;
break;
default:;
}
time=(int)(end_pos/1024*8/(rate));
cout<<"size is "<value());
audiobtn->setIcon(QIcon("./image/audio.png"));
audio_bool=false;
}
else
{
set_audio(0);
audiobtn->setIcon(QIcon("./image/noaudio.png"));
audio_bool=true;
}
}
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include
class audioBtn:public QPushButton
{
Q_OBJECT
public:
audioBtn(QWidget *parent=0);
signals:
void mouseEnter();
void mouseLeave();
private:
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
};
class audioSlider:public QSlider
{
Q_OBJECT
public:
audioSlider(Qt::Orientation orientation);
void enterEvent(QEvent*);
void leaveEvent(QEvent *);
signals:
void mouseenter();
void mouseleave();
};
#endif // MYWIDGET_H
#ifndef MYWIDGET_CPP
#define MYWIDGET_CPP
#include "mywidget.h"
audioBtn::audioBtn(QWidget *parent):QPushButton(parent)
{
}
void audioBtn::enterEvent(QEvent *e)
{
emit mouseEnter();
}
void audioBtn::leaveEvent(QEvent *e)
{
emit mouseLeave();
}
audioSlider::audioSlider(Qt::Orientation orientation):QSlider(orientation)
{
}
void audioSlider::enterEvent(QEvent*)
{
emit mouseenter();
}
void audioSlider::leaveEvent(QEvent *)
{
emit mouseleave();
}
#endif // MYWIDGET_CPP
#ifndef TABDIALOG_H
#define TABDIALOG_H
#include
#include
class stack_Music:public QFrame
{
Q_OBJECT
public:
stack_Music(QWidget *parnet=0);
QStackedWidget *stack;
QListWidget *list1;
QListWidget *list2;
int state;
QList filenamelist1;
QList filenamelist2;
public slots:
void add_music();
void del_music();
void Music_item_clicked(QListWidgetItem *item);
signals:
void change_music(QString music_name );
};
class myMusic:public QWidget
{
public:
myMusic(QWidget *parent=0);
QSplitter *splitter_myMusic;
QPushButton *add;
QPushButton *del;
stack_Music *stack;
};
class historyMusic:public QWidget
{
Q_OBJECT
public:
historyMusic(QWidget *parent=0);
QListWidget *musicList;
QList filenamelist;
signals:
void change_music(QString);
public slots:
void add_music_history(QString);
void musicList_clicked(QListWidgetItem*);
};
class tabDialog : public QWidget
{
Q_OBJECT
public:
tabDialog(QWidget *parent = 0);
QTabWidget *tabWidget;
historyMusic *historyMusic_widget;
myMusic *myMusic_widget;
signals:
};
#endif // TABDIALOG_H
#include "tabdialog.h"
historyMusic::historyMusic(QWidget *parent):QWidget(parent)
{
musicList=new QListWidget(this);
musicList->setMinimumSize(QSize(275,255));
connect(musicList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(musicList_clicked(QListWidgetItem*)));
}
void historyMusic::add_music_history(QString str)
{
musicList->addItem(str.section("/",-1));
filenamelist.append(str);
}
void historyMusic::musicList_clicked(QListWidgetItem* item)
{
int i=0;
while(item->text()!=filenamelist[i].section("/",-1))
i++;
emit change_music(filenamelist[i]);
}
myMusic::myMusic(QWidget *parent):QWidget(parent)
{
resize(280,250);
splitter_myMusic=new QSplitter(Qt::Horizontal,0);
splitter_myMusic->setOpaqueResize(false);
splitter_myMusic->setHandleWidth(1);
splitter_myMusic->setStretchFactor(0,0);
splitter_myMusic->setMaximumWidth(280);
QListWidget *myMusic_list=new QListWidget(splitter_myMusic);
myMusic_list->setMaximumSize(50,230);
myMusic_list->insertItem(0,"my love");
myMusic_list->insertItem(1,"ofen");
stack=new stack_Music(splitter_myMusic);
connect(myMusic_list,SIGNAL(currentRowChanged(int)),stack->stack,SLOT(setCurrentIndex(int)));
QIcon icon;
add=new QPushButton();
QPixmap addpix("./image/add.png");
icon.addPixmap(addpix);
add->setIcon(icon);
add->setIconSize(QSize(25,25));
add->setFixedSize(addpix.size());
add->setMask(addpix.mask());
del=new QPushButton();
QPixmap delpix("./image/delete.png");
icon.addPixmap(delpix);
del->setIcon(icon);
del->setIconSize(QSize(25,25));
del->setFixedSize(delpix.size());
del->setMask(delpix.mask());
connect(add,SIGNAL(clicked()),stack,SLOT(add_music()));
connect(del,SIGNAL(clicked()),stack,SLOT(del_music()));
QHBoxLayout *h=new QHBoxLayout;
h->addWidget(add);
h->addWidget(del);
h->addStretch();
QVBoxLayout *v=new QVBoxLayout;
v->addWidget(splitter_myMusic);
v->addLayout(h);
setLayout(v);
}
tabDialog::tabDialog(QWidget *parent) :
QWidget(parent)
{
tabWidget=new QTabWidget(this);
historyMusic_widget=new historyMusic;
myMusic_widget=new myMusic;
tabWidget->addTab(myMusic_widget,"myMusic");
tabWidget->addTab(historyMusic_widget,"HistoryMusic");
connect(myMusic_widget->stack,SIGNAL(change_music(QString)),historyMusic_widget,SLOT(add_music_history(QString)));
}
stack_Music::stack_Music(QWidget *parent):QFrame(parent)
{
setMaximumWidth(210);
stack=new QStackedWidget(this);
list1=new QListWidget;
list1->setMaximumSize(195,200);
list2=new QListWidget;
list1->addItem("123.mp3");
list1->addItem("1.mp3");
list1->addItem("2.mp3");
filenamelist1.append("/music/123.mp3");
filenamelist1.append("/music/1.mp3");
filenamelist1.append("/music/2.mp3");
list2->setMaximumSize(195,200);
stack->addWidget(list1);
stack->addWidget(list2);
/* add=new QPushButton;
add->setIcon(QIcon("./image/add.png"));
del=new QPushButton;
del->setIcon(QIcon("./image/delete.png"));*/
/* QHBoxLayout *h=new QHBoxLayout();
h->addStretch();
h->addWidget(add);
h->addWidget(del);*/
QVBoxLayout *v=new QVBoxLayout(this);
v->addWidget(stack);
//v->addLayout(h);
connect(list1,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(Music_item_clicked(QListWidgetItem*)));
connect(list2,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(Music_item_clicked(QListWidgetItem*)));
}
void stack_Music::add_music()
{
QString filename;
state=stack->currentIndex();
filename=QFileDialog::getOpenFileName(this,"add Music","/","mp3 file (*.mp3)");
if(stack->currentIndex()==0)
{
filenamelist1.append(filename);
list1->addItem(filename.section("/",-1));
}
if(stack->currentIndex()==1)
{
filenamelist2.append(filename);
list2->addItem(filename.section("/",-1));
}
}
void stack_Music::del_music()
{
if(stack->currentIndex()==0)
{
QListWidgetItem *item=list1->takeItem(list1->currentRow());
filenamelist1.removeAt(list1->currentRow());
delete item;
}
if(stack->currentIndex()==1)
{
QListWidgetItem *item=list2->takeItem(list2->currentRow());
filenamelist2.removeAt(list2->currentRow());
delete item;
}
}
void stack_Music::Music_item_clicked(QListWidgetItem *item)
{
int i=0;
if(stack->currentIndex()==0)
{
while(item->text()!=filenamelist1[i].section("/",-1)){
i++;}
emit change_music(filenamelist1[i]);
}
if(stack->currentIndex()==1)
{
i=0;
while(item->text()!=filenamelist2[i].section("/",-1))
i++;
emit change_music(filenamelist2[i]);
}
}