• qt音乐播放器如何构建


    核心控制函数

        //音乐播放器图标的点击
        connect(labVideoPlayer,SIGNAL(clicked()),this,SLOT(on_labVideoPlayer_clicked()));
        //搜索网络音乐
        connect(btnSearch,SIGNAL(clicked()),this,SLOT(on_btnSearch_clicked()));
    
        //网络json解析
        connect(manager ,&QNetworkAccessManager::finished,this,&VideoPlayer::search_slot);
        connect(manager1 ,&QNetworkAccessManager::finished,this,&VideoPlayer::search_slot1);
    
        //点击头像
        connect(roundHeadWindow,SIGNAL(clicked()),this,SLOT(on_roundHead_clicked()));
        //播放器背景皮肤
        connect(btnBackground,SIGNAL(clicked()),this,SLOT(on_btnBackground_clicked()));
        //添加本地音乐
        connect(btnAdd,SIGNAL(clicked()),this,SLOT(on_btnAdd_clicked()));
        //最小化
        connect(btnMinimize,SIGNAL(clicked()),this,SLOT(on_btnMinimize_clicked()));
        //最大化
        connect(btnMaximize,SIGNAL(clicked()),this,SLOT(on_btnMaximize_clicked()));
        //退出
        connect(btnExit,SIGNAL(clicked()),this,SLOT(on_btnExit_clicked()));
    
        //网络音乐列表
        connect(btnNetworkVideo,SIGNAL(clicked()),this,SLOT(on_btnNetworkVideo_clicked()));
        //本地音乐列表
        connect(btnLocalVideo,SIGNAL(clicked()),this,SLOT(on_btnLocalVideo_clicked()));
    
    
        //歌曲播放相关
        //歌曲切换
        connect(videoplayer,SIGNAL(currentMediaChanged(QMediaContent)),
                this,SLOT(currentMediaChanged()));
        //歌曲进度改变
        connect(videoplayer,SIGNAL(positionChanged(qint64)),this,SLOT(positionChanged(qint64)));
        //歌曲状态改变
        connect(videoplayer,SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
                this,SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus)));
        //播放是否暂停
        connect(videoplayer,SIGNAL(stateChanged(QMediaPlayer::State)),
                this, SLOT(onStateChanged(QMediaPlayer::State)));
        //切换到上一首
        connect(btnPrevious,SIGNAL(clicked()),this,SLOT(on_btnPrevious_clicked()));
        //播放开始与暂停
        connect(btnPlay,SIGNAL(clicked()),this,SLOT(on_btnPlay_clicked()));
        //切换到下一首
        connect(btnNext,SIGNAL(clicked()),this,SLOT(on_btnNext_clicked()));
        //静音切换
        connect(btnMute,SIGNAL(clicked()),this,SLOT(on_btnMute_clicked()));
        //调整音乐声音
        connect(sliderMute,SIGNAL(valueChanged(int)),this,SLOT(on_sliderMute_valueChanged(int)));
        //切换列表播放方式
        connect(btnPlayMode,SIGNAL(clicked()),this,SLOT(on_btnPlayMode_clicked()));
        //双击播放网络音乐
        connect(listWidgetNetworkVideo,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(on_listWidgetNetworkVideo_doubleClicked(QModelIndex)));
        //双击播放本地音乐
        connect(listWidgetLocalVideo,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(on_listWidgetLocalVideo_doubleClicked(QModelIndex)));
    
    • 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

    核心UI函数

    
    //UI创建与初始化
    void VideoPlayer::initUI()
    {
        BackgroundPicturePath = ":/videoplayer/videoplayer_background/back1.jpg";
        //去掉标题栏
        setWindowFlag(Qt::FramelessWindowHint);
        //视频播放器的图标
        labVideoPlayer = new PressLabel();
        labVideoPlayer->setText("Licona视频");
        QFont font;
        font.setWeight(80);
        font.setPointSize(25);
        labVideoPlayer->setFont(font);
        //视频搜索框
        lineEditSearch = new QLineEdit;
        lineEditSearch->setStyleSheet("QLineEdit{"
                                    "border: none;"
                                    "background-color: rgba(255, 255, 255, 150);"
                                    "border-style: outset;"
                                    "border-width: 0px;"
                                    "border-radius: 10px;"
                                    "font: bold 14px;"
                                    "color: rgba(0,0,0,100);"
                                    "padding: 6px;"
                                    "}");
        lineEditSearch->setPlaceholderText("搜索歌曲mv");
        lineEditSearch->setMinimumWidth(50);
    
        //搜索按钮
        btnSearch = new SearchButton;
    
        //头像
        roundHeadWindow = new RoundHead(this,20);
    
        //姓名
        btnUsername = new QToolButton;
        btnUsername->setStyleSheet("QToolButton{border:none;}");
        SqliteDB sqliteDB;
        sqliteDB.establishDB();
        QString username;
        username=sqliteDB.readAccountData().username;
        btnUsername->setText(username);
        sqliteDB.closeDB();
    
        //播放器背景皮肤
        btnBackground = new QToolButton;
        btnBackground->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/skin.png);}");
    
        //添加本地歌曲按钮
        btnAdd = new QToolButton;
        btnAdd->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/add.png);}");
    
        //最小化按钮
        btnMinimize = new QToolButton;
        btnMinimize->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/minimum.png);}");
    
        //最大化按钮
        btnMaximize = new QToolButton;
        btnMaximize->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/maximum.png);}");
    
        //退出按钮
        btnExit = new QToolButton;
        btnExit->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/exit.png);}");
    
    
        QHBoxLayout *HLay1 = new QHBoxLayout;
        HLay1->addWidget(labVideoPlayer);
        HLay1->addSpacing(30);
        HLay1->addWidget(lineEditSearch);
        HLay1->addWidget(btnSearch);
        HLay1->addStretch();
        HLay1->addWidget(roundHeadWindow);
        HLay1->addWidget(btnUsername);
        HLay1->addSpacing(30);
        HLay1->addWidget(btnBackground);
        HLay1->addSpacing(50);
        HLay1->addWidget(btnAdd);
        HLay1->addWidget(btnMinimize);
        HLay1->addWidget(btnMaximize);
        HLay1->addWidget(btnExit);
    
        videoWidget = new VideoWidget();
    
        btnNetworkVideo = new QToolButton;
        btnNetworkVideo->setText("网络");
        btnNetworkVideo->setStyleSheet("QToolButton{border:none;} QToolButton::hover{background-color: rgba(255, 255, 255,150);}");
        btnLocalVideo = new QToolButton;
        btnLocalVideo->setText("本地");
        btnLocalVideo->setStyleSheet("QToolButton{border:none;} QToolButton::hover{background-color: rgba(255, 255, 255,150);}");
        QHBoxLayout *HLay2 = new QHBoxLayout;
        HLay2->addWidget(btnNetworkVideo);
        HLay2->addWidget(btnLocalVideo);
        stackedWidget = new QStackedWidget;
        //网络播放列表
        listWidgetNetworkVideo = new QListWidget();
        listWidgetNetworkVideo->setStyleSheet("QListWidget{"
                                      "background-color:transparent;"
                                      "border-style: solid;"
                                      "border-left-width: 1px;"
                                      "border-right-width: 1px;"
                                      "border-top-width: 1px;"
                                      "border-bottom-width: 1px;"
                                      "}");
        listWidgetLocalVideo = new QListWidget();
        listWidgetLocalVideo->setStyleSheet("QListWidget{"
                                      "background-color:transparent;"
                                      "border-style: solid;"
                                      "border-left-width: 1px;"
                                      "border-right-width: 1px;"
                                      "border-top-width: 1px;"
                                      "border-bottom-width: 1px;"
                                      "}");
        stackedWidget->addWidget(listWidgetNetworkVideo);
        stackedWidget->addWidget(listWidgetLocalVideo);
        stackedWidget->setCurrentIndex(0);
        QVBoxLayout *VLay2 = new QVBoxLayout;
        VLay2->addLayout(HLay2);
        VLay2->addWidget(stackedWidget);
        QHBoxLayout *HLay4 = new QHBoxLayout();
        HLay4->addWidget(videoWidget,3);
        HLay4->addSpacing(15);
        HLay4->addLayout(VLay2,1);
        HLay4->setMargin(15);
    
    
        //播放控制
        labVideoInfo = new QLabel;
        labVideoInfo->setText("无曲目");
    
        btnPrevious = new QToolButton;
        btnPrevious->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/previous.png);}");
    
        btnPlay = new QToolButton;
        btnPlay->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/stop.png);}");
    
        btnNext = new QToolButton;
        btnNext->setStyleSheet("QToolButton{border:none; border-image:url(:/videoplayer/videoplayer_icons/next.png);}");
    
        labCurrentTime = new QLabel;
        labCurrentTime->setText("00:00:00");
    
        QFile qssFile(":/qslider/qslider_style/style.qss");
        qssFile.open(QFile::ReadOnly);
        QString qss;
        qss = qssFile.readAll();
        this->setStyleSheet(qss);
        sliderDuration = new QSlider(Qt::Horizontal);
    
    
        labTotalTime = new QLabel;
        labTotalTime->setText("00:00:00");
    
        btnMute = new QToolButton;
        btnMute->setStyleSheet("QToolButton{border:none;border-image: url(:/videoplayer/videoplayer_icons/voice.png);}");
    
        sliderMute = new QSlider(Qt::Horizontal);
    
        //播放模式,按钮属性设置
        playMode = "顺序播放";
        btnPlayMode = new QToolButton;
        btnPlayMode->setStyleSheet("QToolButton{border:none;border-image: url(:/videoplayer/videoplayer_icons/inorder.png);}");
    
    
        QHBoxLayout *HLay5 = new QHBoxLayout;
        HLay5->addSpacing(20);
        HLay5->addWidget(labVideoInfo);
        HLay5->addWidget(btnPrevious);
        HLay5->addWidget(btnPlay);
        HLay5->addWidget(btnNext);
        HLay5->addStretch();
        HLay5->addWidget(labCurrentTime);
        HLay5->addWidget(sliderDuration);
        HLay5->addWidget(labTotalTime);
        HLay5->addStretch();
        HLay5->addWidget(btnMute);
        HLay5->addWidget(sliderMute);
        HLay5->addWidget(btnPlayMode);
        HLay5->addSpacing(15);
    
        QVBoxLayout *VLay3 = new QVBoxLayout;
        VLay3->addLayout(HLay1);
        VLay3->addLayout(HLay4);
        VLay3->addLayout(HLay5);
    
        setLayout(VLay3);
    
        setFixedSize(900,900);
    
    }
    
    • 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
  • 相关阅读:
    电路方案分析(十三)采用 CAN 的汽车分立式 SBC 预升压、后降压参考设计方案
    窝的个人简介
    【python】内置库函数大集合 ❢ 这不得点赞收藏一波~
    火柴拼正方形(回溯法实现)
    采用状态转移矩阵方式的快速哈夫曼解码算法
    ORB-SLAM2 ---- Initializer::ReconstructF函数
    OpenGL调用窗口,方向键和鼠标
    【期末大作业】基于HTML+CSS+JavaScript网上订餐系统(23个页面)
    汽车行驶中是怎么保障轴瓦安全的?
    【SpringCloud】微服务技术栈入门3 - Gateway快速上手
  • 原文地址:https://blog.csdn.net/Licona/article/details/133268193