您现在的位置是:首页 >其他 >【C++】QT | QMediaPlayer没声音网站首页其他

【C++】QT | QMediaPlayer没声音

chanyueling 2025-03-31 00:01:03
简介【C++】QT | QMediaPlayer没声音
#include "widget.h"
#include "ui_widget.h"
#include <QIcon>
#include <QMediaPlayer>
#include <QAudioOutput>

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

    this->setWindowTitle("MusicPlayer");
    this->setWindowIcon(QIcon(":/image/Player.png"));

    ui->pushButton_pause->setIcon(QIcon(":/image/pause.png"));

	p.setMedia(QUrl::fromLocalFile("E:\Test\music\告白气球.mp3"));
	 p.play();	

}

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

QT5这样写即可播放。但是在QT6中报错:

error: No member named ‘setMedia’ in ‘QMediaPlayer’

搜索后得到方案:setMedia改成setSource


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

    p.setSource(QUrl::fromLocalFile("C:\Users\2025\Desktop\first.mp3"));
    p.play();
}

还是不行。换了文件位置和引用方法都不行。最后发现是QT6需要加上音频流:

QAudioOutput * audioOutput = new QAudioOutput(this);

完整版:

#include "widget.h"
#include "ui_widget.h"
#include <QIcon>
#include <QMediaPlayer>
#include <QAudioOutput>

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

    ui->pushButton_pause->setIcon(QIcon(":/image/pause.png"));

    QAudioOutput * audioOutput = new QAudioOutput(this);
    p.setAudioOutput(audioOutput);
	audioOutput->setVolume(0.5);   // 调整音量,0~100%
	p.setSource(QUrl("D:/qt/QtCreator/MusicPlayer/music/first.mp3"));
    p.play();
}

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

注意,路径要用单个“ / ”才能用。QT5可用的“ \ ”失效了。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。