首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMediaPlayer不产生音频

QMediaPlayer不产生音频
EN

Stack Overflow用户
提问于 2019-03-16 16:26:04
回答 1查看 910关注 0票数 0

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

这是我的密码:

代码语言:javascript
复制
#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:定时器只能用于以QThread启动的线程 QObject::startTimer:定时器只能用于以QThread启动的线程

这是我的.pro文件:

代码语言:javascript
复制
TEMPLATE = app
TARGET = MediaPlayer
QT += core multimedia
SOURCES += main.cpp

环境

软呢帽29 Qt 5.11.3-1

我试着在Qt创建者和终端上运行这个程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-16 19:00:24

您的应用程序缺少一个

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

Q*Application是大多数Qt应用程序必须的组件,因为这是处理主线程上所有事件和信号的部分。这就是为什么会出现与QTimer相关的错误,因为Qt无法预先用QThread“包装”主线程。

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

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

代码语言:javascript
复制
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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55198955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档