国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt項目實戰(zhàn):MP3音樂播放器

這篇具有很好參考價值的文章主要介紹了Qt項目實戰(zhàn):MP3音樂播放器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

音樂播放器邏輯

??首先通過打開文件,獲取文件夾下mp3文件的名字,將其存入QTableWidget控件下,通過雙擊QTableWidget空間中的內(nèi)容,播放相應(yīng)的mp3音樂文件,同時通過使用QMediaPlaylist來實現(xiàn)上一首,下一首的功能。

效果圖

qt 播放mp3,Qt開發(fā),qt,ui,qt教程,qt開發(fā),音視頻開發(fā)

?

具體實現(xiàn)

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
class QMediaPlayer;
class QMediaPlaylist;

class QLabel;

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    void InitWidget();
    ~Widget();

private slots:
    void on_pushButton_clicked();
    void on_pushButton_5_clicked();
    void musicplayer(int,int);
    void on_pushButton_7_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_6_clicked(bool checked);
    void valueChanged(qint64 value);
    void setPositon(int);
    void updateDuration(qint64 duration);

protected:

private:
    void findFile(const QString&path,std::vector<QString>& fileNames);
    Ui::Widget *ui;
    QString path;
    QMediaPlayer *player;
    QMediaPlaylist *playlist;
    int num_music;
    int status = 1;
    qint64 position;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QDebug>
#include<QMediaPlayer>
#include<QTableWidgetItem>
#include<QMouseEvent>
#include<QMediaPlaylist>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    player = new QMediaPlayer(this);
    playlist = new QMediaPlaylist;
    ui->setupUi(this);
    InitWidget();

    connect(ui->tableWidget,&QTableWidget::cellDoubleClicked,this,&Widget::musicplayer);
    connect(ui->horizontalSlider,&QSlider::sliderMoved,this,&Widget::setPositon);
    connect(player, &QMediaPlayer::durationChanged, this, &Widget::updateDuration);
    connect(player,&QMediaPlayer::positionChanged,this,&Widget::valueChanged);

}

void Widget::InitWidget()
{
    ui->label_2->hide();
    ui->label_3->hide();
    ui->tableWidget->hide();
    ui->pushButton_5->hide();
    ui->pushButton_6->hide();
    ui->pushButton_7->hide();
    ui->pushButton_8->hide();
    ui->horizontalSlider->hide();
    ui->label_4->hide();
}

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

void Widget::on_pushButton_clicked()
{
    ui->label_2->show();
    ui->tableWidget->show();
    ui->pushButton_5->show();
}

void Widget::on_pushButton_5_clicked()
{
    path = QFileDialog::getExistingDirectory(this,"請選擇本地音樂文件夾");
    std::vector<QString> fileNames;
    findFile(path,fileNames);

    //設(shè)置行數(shù),列數(shù)
    ui->tableWidget->setColumnCount(1);
    ui->tableWidget->setRowCount(fileNames.size());

    num_music = fileNames.size();

    for(int i=0;i<fileNames.size();i++)
    {

        ui->tableWidget->setItem(i,0,new QTableWidgetItem(fileNames[i]));
        //設(shè)置cell不可編輯
        QTableWidgetItem* pItem = ui->tableWidget->item(i, 0);
        int editflag = Qt::ItemIsEditable;
        pItem->setFlags((Qt::ItemFlag)(~editflag & pItem->flags()));
    }
}

static QString formatTime(qint64 timeMilliSeconds)
{
    qint64 seconds = timeMilliSeconds / 1000;
    const qint64 minutes = seconds / 60;
    seconds -= minutes * 60;
    return QStringLiteral("%1:%2")
        .arg(minutes, 2, 10, QLatin1Char('0'))
        .arg(seconds, 2, 10, QLatin1Char('0'));
}

void Widget::musicplayer(int row, int column)
{
    QTableWidgetItem *item = new QTableWidgetItem;

    playlist->clear();
    player->pause();
        item = ui->tableWidget->item(row,0);
//        player->setMedia(QUrl::fromLocalFile(item->text()));


        for(int i=row;i<num_music;i++)
        {
            item = ui->tableWidget->item(i,0);
            playlist->addMedia(QUrl::fromLocalFile(item->text()));
        }
        playlist->setCurrentIndex(0);
        playlist->setPlaybackMode(QMediaPlaylist::Loop);
        player->setPlaylist(playlist);
        player->play();

        ui->label_3->show();
        ui->pushButton_6->show();
        ui->pushButton_7->show();
        ui->pushButton_8->show();
        ui->horizontalSlider->show();
        ui->label_4->setText(formatTime(0));
        ui->label_4->show();
}



void Widget::findFile(const QString &path, std::vector<QString> &fileNames)
{
    QDir dir(path);

    //獲取path下所有文件夾和文件
    dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot); //文件夾/文件/不包含./和../

    //排序文件夾優(yōu)先
    dir.setSorting(QDir::DirsFirst);

    //獲取文件夾下所有文件(文件夾+文件)
    QFileInfoList list = dir.entryInfoList();

    if(list.size()==0)
    {
        return;
    }

    //遍歷
    for(int i=0;i<list.size();i++)
    {
        QFileInfo fileInfo = list.at(i);
        if(fileInfo.isDir())
        {
            findFile(fileInfo.filePath(),fileNames);
        }
        else {
            if(fileInfo.suffix()=="mp3")
            {
                fileNames.emplace_back(list.at(i).filePath());
            }
        }
    }
}

void Widget::on_pushButton_7_clicked()
{
    playlist->next();
}

void Widget::on_pushButton_8_clicked()
{
    playlist->previous();
}

void Widget::on_pushButton_6_clicked(bool checked)
{
    int status1 = status%2;
    //qDebug()<<checked;
    if(status1==0)
    {
        player->setPosition(position);
        player->play();
        ui->pushButton_6->setIcon(QPixmap("C:/Users/11830/Downloads/4.jpg"));
    }
    else {
        player->pause();
        position = player->position();
        ui->pushButton_6->setIcon(QPixmap("C:/Users/11830/Downloads/1.jpg"));
    }
    status+=1;
}

void Widget::valueChanged(qint64 value)
{
    ui->horizontalSlider->setValue(value);
    ui->label_4->setText(formatTime(value));
    ui->label_3->setText(player->metaData("Title").toString());
}

void Widget::setPositon(int value)
{
    if (qAbs(player->position() - value) > 99)
        player->setPosition(value);
    //qDebug()<<(value*player->duration()/100);
}

void Widget::updateDuration(qint64 duration)
{
    ui->horizontalSlider->setRange(0, duration);
    ui->horizontalSlider->setEnabled(duration > 0);
    ui->horizontalSlider->setPageStep(duration / 10);
}

main.cpp

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

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

    return a.exec();
}

本文福利,費(fèi)領(lǐng)取Qt開發(fā)學(xué)習(xí)資料包、技術(shù)視頻,內(nèi)容包括(C++語言基礎(chǔ),Qt編程入門,QT信號與槽機(jī)制,QT界面開發(fā)-圖像繪制,QT網(wǎng)絡(luò),QT數(shù)據(jù)庫編程,QT項目實戰(zhàn),QSS,OpenCV,Quick模塊,面試題等等)↓↓↓↓↓↓見下面↓↓文章底部點(diǎn)擊費(fèi)領(lǐng)取↓↓文章來源地址http://www.zghlxwxcb.cn/news/detail-737080.html

到了這里,關(guān)于Qt項目實戰(zhàn):MP3音樂播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【基于Qt的在線音樂播放器】

    【基于Qt的在線音樂播放器】

    本在線音樂播放器的功能在于創(chuàng)建一個音樂播放器頁面,可以實現(xiàn)搜索功能通過HTTP協(xié)議獲取網(wǎng)絡(luò)中數(shù)據(jù)并解析出來,播放搜索到的歌曲并展示相關(guān)信息。效果如圖: Musicinterface 視圖類; 主要功能:初始化窗口;設(shè)置按鈕功能和窗口內(nèi)容的顯示; HttpHandle 網(wǎng)絡(luò)連接類; 主要功

    2024年02月03日
    瀏覽(25)
  • 嵌入式Qt 開發(fā)一個音樂播放器

    嵌入式Qt 開發(fā)一個音樂播放器

    上篇文章:RK3568源碼編譯與交叉編譯環(huán)境搭建,進(jìn)行了OK3568開發(fā)板軟件開發(fā)環(huán)境搭建,通過編譯RK3568的源碼,可以得到Qt開發(fā)的交叉編譯相關(guān)工具。 本篇,就來在搭建好的軟件開發(fā)中,進(jìn)行Qt軟件的開發(fā)測試。由于Qt是支持跨平臺的,因此本篇的音樂播放器,先在Windows上編寫

    2024年02月02日
    瀏覽(41)
  • Android Studio 做一個 MP3 播放器

    Android Studio 本身提供了多個音頻播放器組件,可以通過這些組件來實現(xiàn)音頻播放功能,其中包括 MediaPlayer、SoundPool 和 ExoPlayer 等。官方推薦我們使用ExoPlayer因為功能更強(qiáng)大,但這里用MediaPlayer因為編寫更簡單。 在使用 MediaPlayer 實現(xiàn) MP3 播放器時,需要注意以下幾點(diǎn): 在使用

    2024年02月04日
    瀏覽(20)
  • [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(三): 動畫

    [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(三): 動畫

    @ 目錄 吸附動畫 確定位置 平移動畫 回彈動畫 使用自定義緩動函數(shù) 多重動畫 點(diǎn)擊動畫 項目地址 上一章節(jié)我們創(chuàng)建了手勢容器控件PanContainer,它對拖拽物進(jìn)行包裝并響應(yīng)了平移手勢和點(diǎn)擊手勢。 拖拽物現(xiàn)在雖然可以響應(yīng)手勢操作,但視覺效果較生硬,一個優(yōu)秀的設(shè)計要求

    2023年04月09日
    瀏覽(19)
  • [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(二): 手勢交互

    [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(二): 手勢交互

    @ 目錄 原理 交互實現(xiàn) 容器控件 手勢開始 手勢運(yùn)行 手勢結(jié)束 使用控件 拖拽物 創(chuàng)建pit集合 項目地址 定義一個拖拽物,和它拖拽的目標(biāo),拖拽物可以理解為一個平底鍋(pan),拖拽目標(biāo)是一個坑(pit),當(dāng)拖拽物進(jìn)入坑時,拖拽物就會被吸附在坑里??梢阅X補(bǔ)一下下圖: 你

    2023年04月08日
    瀏覽(22)
  • [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(四):圓形進(jìn)度條

    [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(四):圓形進(jìn)度條

    @ 目錄 關(guān)于圖形繪制 創(chuàng)建自定義控件 使用控件 創(chuàng)建專輯封面 項目地址 我們將繪制一個圓形的音樂播放控件,它包含一個圓形的進(jìn)度條、專輯頁面和播放按鈕。 使用MAUI的繪制功能,需要Microsoft.Maui.Graphics庫。 Microsoft.Maui.Graphics在不同的目標(biāo)平臺上使用一致的API訪問本機(jī)圖形

    2023年04月09日
    瀏覽(23)
  • [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(一): 概述與架構(gòu)

    [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(一): 概述與架構(gòu)

    這是一篇系列博文。請關(guān)注我,學(xué)習(xí)更多.NET MAUI開發(fā)知識! [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(一): 概述與架構(gòu) [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(二): 手勢交互 [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(三): 動畫 [MAUI 項目實戰(zhàn)] 手勢控制音樂播放器(四):圓形進(jìn)

    2023年04月09日
    瀏覽(16)
  • Mini MP3 Player播放器簡介與STC12例程

    Mini MP3 Player播放器簡介與STC12例程

    The DFPlayer Mini MP3 Player For Arduino is a small and low price MP3 module with an simplified output directly to the speaker. The module can be used as a stand alone module with attached battery, speaker and push buttons or used in combination with an Arduino UNO or any other with RX/TX capabilities. 簡介 DFPlayer迷你MP3播放器Arduino是一個小而便

    2024年02月08日
    瀏覽(96)
  • AI智能語音識別模塊(二)——基于Arduino的語音控制MP3播放器

    AI智能語音識別模塊(二)——基于Arduino的語音控制MP3播放器

    在前面一篇文章里我們對AI智能語音識別模塊進(jìn)行了介紹,并對離線語音模組下載固件的過程進(jìn)行了一個簡單描述,不知道大家還記不記得,這篇文章也是鴿了好久,,本文將用這個語音控制模塊結(jié)合前面介紹的DFPlayer Mini MP3模塊來做一個有趣的應(yīng)用,在上一期文章中,我們只

    2024年02月03日
    瀏覽(29)
  • 【QT項目:視頻播放器——Qt opengl編程】通過shader完成顯示yuv

    【QT項目:視頻播放器——Qt opengl編程】通過shader完成顯示yuv

    通過Qt opengl不是為了3D繪制,而是為了將視頻繪制起來 使用opengl 可以極大降低yuv轉(zhuǎn)rgb的轉(zhuǎn)換開銷 1、為什么用QT的opengl 簡單,界面可以自動疊加 void paintGL(); // 具體的繪制寫在該函數(shù)里 void initializeGL(); // 材質(zhì)初始化 void resizeGL(int width, int height); // 當(dāng)窗口發(fā)生變化(縮放) QO

    2023年04月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包