【问题标题】:QMediaplayer: No soundQMediaplayer:没有声音
【发布时间】:2017-10-19 21:42:15
【问题描述】:

问题: 以下调用不会使 QMediaPlayer 播放任何声音。

player->setMedia(QUrl("qrc:/snd/coin-refund.mp3"));
player->play();

其中player 的类型为QMediaPlayer*。 URL 是使用 QtCreator Copy URL 选项生成的。所以文件肯定在 .qrc 文件中。

详情:

我有一个从QObject 派生的类,如下所示:

class MyClass : public QObject
{
    Q_OBJECT
    // some stuff
    private:
    QMediaPlayer* player;
 }

像这样在 MyClass 构造函数中调用 QMediaPlayer 标准构造函数...

MyClass::MyClass() :
    player(new QMediaPlayer)
{
}

...在运行时导致以下错误消息(应用程序编译时没有任何警告)

QObject::startTimer: 定时器只能用于启动的线程 线程

删除播放器会删除此消息(我没有明确创建任何 QThreads 或 QTimers)。

在我的 .pro 文件中:

QT += core gui webkitwidgets multimedia multimediawidgets widgets

其他信息: 我在 Arch Linux 上,使用 QtCreator 4.2.2 和 Qt 5.8.0

编辑:

github link

ldd output (pastebin)

【问题讨论】:

  • 您是否安装了 mp3 的编解码器?我正在使用 Archlinux,Qt 5.8,我没有任何问题......如果您可以通过 github、dropbox 或类似方式共享您的项目,您可以提供更好的帮助。
  • 你可以运行:ldd your_executable 并展示你得到了什么。
  • @eyllanesc 按要求添加了 github 链接。
  • @eyllanesc 添加了 ldd 输出

标签: c++ qt qt5 qmediaplayer


【解决方案1】:

问题似乎是对象在构造函数中没有正常启动,目前我找到的解决方案是每次要创建对象时都要做play()

void automaton::vendorSlot(const unsigned int buttonPressed)
{
    player = new QMediaPlayer;
    switch (buttonPressed)
    [...]

【讨论】:

  • 这对我也有用!奇怪的是在类构造函数中初始化时不起作用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2017-03-16
  • 2021-04-22
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多