使用QT设计一个音乐播放器

news/2024/7/7 9:52:52

功能已实现:播放,上一曲,下一曲。

mymusic.h

#ifndef MYMUSIC_H
#define MYMUSIC_H

#include <QWidget>
#include<QStyleOption>
#include<QPainter>
#include<QDir>
#include<QListWidgetItem>
#include<QMediaPlayer>
namespace Ui {
class myMusic;
}

class myMusic : public QWidget
{
    Q_OBJECT

public:
    explicit myMusic(QWidget *parent = 0);
    ~myMusic();

private:
    Ui::myMusic *ui;

private:
    QString str_pathmusic;//音乐文件夹位置
    QListWidgetItem *p_item;//音乐列表
    bool b_play_music=false;//是否播放音乐
    QMediaPlayer * p_player;
    QString str_music;//播放名称
    int n_music_number;

private slots:
    void slot_upperbtn_clicked();//上一曲
    void slot_playbtn_clicked();//播放
    void slot_downbtn_clicked();//下一曲
    void slot_musicListRowNum(int);

private:
    void paintEvent(QPaintEvent *event);
    //读取文件
    void readFile();
    //初始化界面
    void initUI();
};

#endif // MYMUSIC_H

main.cpp

#include "mymusic.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    myMusic w;
    w.show();

    return a.exec();
}

mymusic.cpp

#include "mymusic.h"
#include "ui_mymusic.h"
#include<QDebug>
myMusic::myMusic(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::myMusic)
{
    ui->setupUi(this);
    initUI();
    readFile();
    this->setWindowIcon(QIcon(":/picture/logo.webp"));
}

myMusic::~myMusic()
{
    delete ui;
}
//读取文件
void myMusic::readFile(){
    //设置要遍历的目录
    str_pathmusic="D:/music_download";
    QDir dir(str_pathmusic);
    //设置文件过滤器
    QStringList nameFileters;
    //设置文件过滤器的格式
    nameFileters<<"*.mp3";
    //将过滤后的文件名称存入list中
    QStringList files =dir.entryList(nameFileters,QDir::Files|QDir::Readable,QDir::Name);
    //添加到listWidget到item中
    ui->listWidget->addItems(files);
    //把item加入到listwidget中
    ui->listWidget->sortItems();
    //为列表添加默认指向
    p_item=ui->listWidget->item(0);
    p_item->setSelected(true);
//    //播放一首歌曲
//    QMediaPlayer * player =new QMediaPlayer();
//    player->setMedia(QUrl::fromLocalFile("D:/music_download"));
//    player->setVolume(80);
//    player->play();


}
void myMusic::slot_musicListRowNum(int n_number)
{
    qDebug()<<n_number<<endl;
    qDebug()<<ui->listWidget->item(n_number)->text()<<endl;
    str_music=ui->listWidget->item(n_number)->text();
    p_player=new QMediaPlayer;
    p_player->setMedia(QUrl::fromLocalFile(str_pathmusic+'/'+str_music));
    p_player->setVolume(60);
    p_player->stop();
    n_music_number=n_number;
}

//初始化界面
void myMusic::initUI(){
    connect(ui->upperbtn,SIGNAL(clicked(bool)),this,SLOT(slot_upperbtn_clicked()));
    connect(ui->playbtn,SIGNAL(clicked(bool)),this,SLOT(slot_playbtn_clicked()));
    connect(ui->downbtn,SIGNAL(clicked(bool)),this,SLOT(slot_downbtn_clicked()));
    connect(ui->listWidget,SIGNAL(currentRowChanged(int)),this,SLOT(slot_musicListRowNum(int)));
}

void myMusic::paintEvent(QPaintEvent *){
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget,&opt,&p,this);
}

void myMusic::slot_upperbtn_clicked()//上一曲
{
    qDebug()<<"上一曲";
    p_player->stop();
    if(n_music_number==0)
    {
        int nMax=ui->listWidget->count();
        str_music=ui->listWidget->item(nMax-1)->text();
        p_item=ui->listWidget->item(nMax-1);
        p_item->setSelected(true);
        QString str=str_pathmusic+'/'+str_music;
        p_player->setMedia(QUrl::fromLocalFile(str));
        p_player->setVolume(60);
        p_player->play();
        n_music_number=nMax-1;
    }
    str_music=ui->listWidget->item(n_music_number-1)->text();
    p_item=ui->listWidget->item(n_music_number-1);
    p_item->setSelected(true);

    QString str=str_pathmusic+'/'+str_music;
    p_player->setMedia(QUrl::fromLocalFile(str));
    p_player->setVolume(60);
    p_player->play();
    n_music_number=n_music_number-1;

}

void myMusic::slot_playbtn_clicked()//播放
{

    if(b_play_music)
    {
        ui->playbtn->setStyleSheet("QPushButton#playbtn{border-image: url(:/picture/stop.png);}");
        b_play_music=false;
        p_player->pause();//暂停
        qDebug()<<"暂停";
    }
    else
    {
        ui->playbtn->setStyleSheet("QPushButton#playbtn{border-image: url(:/picture/begin.png);}");
        b_play_music=true;
        p_player->play();//播放
        qDebug()<<"播放";
    }

}

void myMusic::slot_downbtn_clicked()//下一曲
{
    qDebug()<<"下一曲";
    int nMax=ui->listWidget->count();
    p_player->stop();
    if(n_music_number==nMax-1)
    {
        str_music=ui->listWidget->item(0)->text();
        p_item=ui->listWidget->item(0);
        p_item->setSelected(true);
        QString str=str_pathmusic+'/'+str_music;
        p_player->setMedia(QUrl::fromLocalFile(str));
        p_player->setVolume(60);
        p_player->play();
        n_music_number=-1;
    }
    str_music=ui->listWidget->item(n_music_number+1)->text();
    p_item=ui->listWidget->item(n_music_number+1);
    p_item->setSelected(true);

    QString str=str_pathmusic+'/'+str_music;
    p_player->setMedia(QUrl::fromLocalFile(str));
    p_player->setVolume(60);
    p_player->play();
    n_music_number=n_music_number+1;

}

效果图

在这里插入图片描述


http://www.niftyadmin.cn/n/3660392.html

相关文章

取模与取余

取模&#xff08;Modulo Operation&#xff09;与取余&#xff08;Remainder Operation&#xff09; 这两个在两个数值都为正数的时候是一样的&#xff0c;但是出现负数后&#xff0c;就会不同。 求模运算结果的符号和b一致&#xff0c;求余运算结果的符号和a一致。 例如&…

取模运算实例

-1与256取模的计算 从数学角度解读&#xff1a;取模运算时,对于负数,应该加上被除数的整数倍,使结果大于或等于0之后,再进行运算.也就是&#xff1a;(-1)%256 (-1256)%256255%256255计算机存储角度&#xff1a;计算机中负数是以补码形式存储的&#xff0c;-1的补码11111111&a…

(argc,argv)、算术类型、框架

106.int main(int argc, char *argv[])的意义&#xff1a; argc和argv参数在用命令行编译程序时有用。 int main( int argc, char* argv[], char env ) 中 第一个参数&#xff0c;int型的argc&#xff0c;为整型&#xff0c;用来统计程序运行时发送给main函数的命令行参数的个…

框架模式,各种语言的框架,设计模式

109.框架模式有&#xff1a; MVC、MTV、MVP、CBD、ORM等等&#xff1b; 110.框架有&#xff1a; C语言的QT、MFC、gtk&#xff0c; Java语言的SSH 、SSI&#xff0c; php语言的 smarty(MVC模式)&#xff0c; python语言的django(MTV模式)等等 111.设计模式有&#xff1a; …

15种PHP Encoder的比较

来源&#xff1a;http://www.encodercompare.com/似乎没有一个免费且好用的。。Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId1220354

耦合性,Spring,SSH

112.耦合性 耦合性&#xff08;英语&#xff1a;Coupling&#xff0c;dependency&#xff0c;或称耦合力或耦合度&#xff09;是一种软件度量&#xff0c;是指一程序中&#xff0c;模块及模块之间信息或参数依赖的程度。 内聚性是一个和耦合性相对的概念&#xff0c;一般而言低…

[活动召集]福建PHP社区聚会

打算在近期组织一次福建PHP社区的小型聚会&#xff0c;主题是PHP技术趋势、项目开发、网站运营等内容交流(具体主题待定&#xff0c;欢迎建议)。PHPChina.cn会派人参加&#xff0c;提供赞助并向参加的PHPER赠送PHP T-shirt作为纪念。我们的目标是&#xff1a;认识更多朋友&…

2006国庆PHP原创文章大赛

为了促进国内PHPer的交流、提倡原创&#xff0c;PHPmore.com和phpe.net联合发起 06国庆PHP原创文章大赛。有很多精美礼品赠送&#xff0c;请参见&#xff1a;http://www.phpmore.com/?ucampaign_display&id1活动细则1 活动对象&#xff1a;爱好PHP&#xff0c;喜欢交流。稿…