在QtCreator外部启动时,QMediaPlayer无法在Windows上开始播放

时间:2013-03-01 20:34:59

标签: c++ windows qt mp3 dll

我想用Qt5容纳自己,所以我开了一个非常小的MP3播放器。它在Linux和Windows 7上编译,均为64位。

在Windows上运行时,所选的mp3文件只有在QtCreator中启动程序时才会开始播放。当我启动独立(共享编译)EXE时,程序打开但是开始播放没有任何反应(当在IDE内部调试时,一切似乎都有效,我想是一种Heisenbug)。

Processmonitor 中查看文件访问时,我看到了目录扫描,但是当应该打开MP3时没有任何反应。

也许我错过了复制DLL,但是我没有提示缺少哪一个,所以这可能是另一个问题。 Dependency Walker 输出(虽然它没有告诉我哪些文件/功能导致错误,也许我错过了它):

Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

这是我尝试启动EXE的目录内容

  • 文件夹“平台”包括:qminimal.dll,qwindows.dll
  • icudt49.dll,icuin49.dll,icuuc.49.dll
  • IEShims.dll(没有它,但Dependency Walker告诉它失踪)
  • libEGL.dll
  • libgcc_s_sjlj-1.DLL
  • libGLESv2.dll
  • 的libstdc ++ - 6.dll
  • libwinpthread-1.DLL
  • Qt5Core.dll,Qt5Gui.dll,Qt5Multimedia.dll,Qt5Network.dll,Qt5Widgets.dll
  • purr.exe

您可以查看完整的源@ https://github.com/VashSan/purr - 我开始播放的部分源代码:

void PurrWindow::playMedia()
{
    // [...]
    // QMediaPlayer is a member of PurrWindow:

    QUrl media = QUrl::fromLocalFile(selectedFile);
    player.setMedia(media);
    player.play();
}

我用MSVC2010编译了一次程序,用Mingw编译了一次没有区别。

我尝试了谷歌QMediaPlayer错误,但大多数都涉及移动平台。然而,它并没有给我留下QMediaPlayer的好印象,也许我应该看一个更可靠的播放库。但是,如果它只是开始播放我会很高兴。

1 个答案:

答案 0 :(得分:1)

使用DLL Export Viewer查看 .exe 是指正确的 .dlls

有时人们安装了多个Qt / Phonon版本,而PATH环境变量并未指向这些DLL所在的目录。

另外,请确保selectedFile具有该文件的完整路径。在之后检查路径是否有效是个好主意。

selectedFile = fileDialog.getSelectedPath();

使用:

QFile file( selectedFile );
if( !file.exists() )
{
  qDebug() << "!!! Invalid file: " << selectedFile;
  return;
}