QMediaPlayer 不产生音频

QMediaPlayer doesn't produce audio

我刚开始使用 C++,我正在尝试使用 Qt 播放 mp3 文件。我写了这段代码,但由于某种原因它不起作用。我在互联网上搜索过,但找不到有用的东西。

这是我的代码:

#include <iostream>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QFileInfo>
#include <QUrl>

int main()
{
    QMediaPlaylist *list = new QMediaPlaylist;
    list->addMedia(QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath()));
    QMediaPlayer *music;
    music = new QMediaPlayer();
    music->setPlaylist(list);
    music->play();
    return 0;
}

没有音乐播放,这个程序的输出是:

QObject::startTimer: Timers can only be used with threads started with QThread
QObject::startTimer: Timers can only be used with threads started with QThread

这是我的 .pro 文件:

TEMPLATE = app
TARGET = MediaPlayer
QT += core multimedia
SOURCES += main.cpp

环境:

Fedora 29
Qt 5.11.3-1

我尝试在 Qt Creator 和终端上 运行 这个程序。

您的申请缺少

  • QCoreApplication 如果它应该是无头的
  • QGuiApplication 对于 QtQuick,或
  • QApplication 如果它具有小部件

Q*Application 是大多数 Qt 应用程序的必需组件,因为这是在主线程上处理所有事件和信号的部分。这就是为什么您遇到 QTimer 相关错误的原因,因为 Qt 无法事先使用 QThread "wrap" 主线程。

只需添加它,以及 app.exec(); 启动它,您应该没问题。 app.exec() 将阻塞,直到您的应用程序完成。

此外,在应用程序的整个生命周期中您需要的实例通常应该在堆栈而不是堆上创建。

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    QMediaPlaylist list;
    auto media = QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath());
    list.addMedia(media);

    QMediaPlayer music;
    music.setPlaylist(list);
    music.play();

    return app.exec();
}