Qt入门小项目 超详细注释 附源码

该文介绍了一个使用Qt框架构建的音乐盒应用,具备播放/暂停音乐、上下切换歌曲、滑动调节音量、定时切换名人名言及显示时间的功能。代码中主要涉及QMediaPlayer、QMediaPlaylist等Qt库,实现音乐播放列表和界面交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音乐盒

一,系统功能

(1)暂停、播放音乐

(2)上、下切换音乐

(3)滑动调节音量

(4)定时切换名人名言

(5)显示时间(年月日,时分秒,周几)

注:效果图如下

4378faae1ea9473a90ceb778ef455416.png

二,项目涉及:

1,QPushButton

2,QMediaPlayer

3,QMediaPlaylist

4,QTimer,

5,QDateTime

6,Ui设计

三,UI部分

1,整体布局

f7a61b8bcc444cf1bd7998ef76dd45e8.png

2,布局嵌套

ecbd6802456340a988d81cc2f2c672fd.png

3,对象嵌套

7172cead7a2345ac920e675d102ded65.png

4,stackedWidget内部

1014465f75524d6ab7950efa95c65253.png

 

四,附源代码

1,获取源码:

https://pan.baidu.com/s/1SiUBDndmOCdH-SyF_6L0pA?pwd=l64l 
提取码:l64l

 2,关键代码(music.cpp)

#include "music.h"
#include "ui_music.h"//ui界面设计
#include"QPushButton"//按钮头文件
#include"QMediaPlayer"//音视频播放器头文件
#include"QMediaPlaylist"//媒体文件头文件
#include<QTimer>//计时器头文件
#include<QDateTime>//时间的头文件


Music::Music(QWidget *parent):
    QWidget(parent),
    ui(new Ui::Music)
{
    ui->setupUi(this);



    //新建播放器
    QMediaPlayer *player = new QMediaPlayer;
    //新建音乐列表
    QMediaPlaylist *list = new QMediaPlaylist;

    //添加音乐列表,把喜欢的歌曲添加到此处,直接从资源文件里面复制地址
    list->addMedia(QMediaContent(QUrl("qrc:/res/Taylor Swift - Love Story.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/Catch_My_Breath-Kelly_Clarkson-14312722.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/暗号-周杰伦-235497.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/华晨宇 - 好想爱这个世界啊.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/바빠-Sistar-19511203.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/Joysaaaa - 也许(1).mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/红色高跟鞋-《爱情左右》电影主题曲-蔡健雅-450444.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/Try-Colbie_Caillat-5746692.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/Need_You_Now-Lady_Antebellum-40963108.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/喜欢你-《澳门风云3》电影插曲_《摆渡人》电影插曲-Beyond-79090.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/开往早晨的午夜-张碧晨-15193825.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/稻香-周杰伦-440613.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/爱的飞行日记-周杰伦_杨瑞代-728668.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/指纹-杜宣达-197876799.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/Maren Ord - Perfect.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/我们的明天-《重返20岁》电影主题曲-鹿晗-6215461.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/敢爱敢做-《神奇两女侠》电影主题曲-林子祥-55216442.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res2/We_Can't_Stop-Miley_Cyrus-3386415.mp3")));
    list->addMedia(QMediaContent(QUrl("qrc:/res/一路生花-温奕心-162582615.mp3")));
    list->setPlaybackMode(QMediaPlaylist::Loop);

    player->setPlaylist(list);//选择播放列表
    player->setVolume(10);  //设置初始音量

    //播放 暂停 键功能的实现
    connect(ui->btn2,&QPushButton::clicked,[=](){
        switch (player->state())
        {
            //如果是播放状态 则暂停, 否则播放
            case QMediaPlayer::PlayingState:
                player->pause();
                break;
            default:
                player->play();
                break;
         }
    });

    //上一曲 按键功能的实现
    connect(ui->btn1,&QPushButton::clicked,list,[=](){
        int t=list->currentIndex();
        if(--t<0)   //t自减
                t=0;//如果已经是第一曲,则保持
        list->setCurrentIndex(t);//设置为当前指数
        player->play();//设置完成 开始播放
    });

    //下一曲 功能实现和上一曲类似
    connect(ui->btn3,&QPushButton::clicked,[=](){
        int t=list->currentIndex();
        if(++t==list->mediaCount())
            t=0;
        list->setCurrentIndex(t);
        player->play();
    });

    //音量调节
    connect(ui->yl,&QSlider::valueChanged,[=](){
        int vaule=ui->yl->value();//用QSlider滑动条 调节音量
        player->setVolume(vaule); //重新设置音量
    });


    QTimer *shijian = new QTimer(this);
    shijian->start(0);//使用定时器信号槽,尽快更新时间的显示

    connect(shijian,&QTimer::timeout,[=](){
        QDateTime time = QDateTime::currentDateTime();
        //显示时间,格式为:年-月-日 时:分:秒 周几
        QString StrCurrentTime = time.toString("yyyy/MM/dd | hh:mm:ss | ddd");
        //时间显示格式可自由设定,如hh:mm ddd 显示 时:分 周几
        ui->time->setText(StrCurrentTime);//调用ui文本框 用于放置当前时间
    });

    QTimer *shi = new QTimer(this);
    shi->start(8000);//8000ms切换一次悬浮着的优美文案
    Music::i=0;      //给Music类成员变量赋初值 用于控制stackedWidget的翻页
    connect(shi,&QTimer::timeout,[=](){
        ui->stackedWidget->setCurrentIndex(Music::i++);//stackedWidget实现翻页
        if(Music::i==20)
            Music::i=0;//循环使用文案句子,只有20页,可以依据自己的喜好增减
    });

}

Music::~Music()
{
    delete ui;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值