1

我想适应 Qt5,所以我开始了一个非常小的 mp3 播放器。它可以在 64 位的 Linux 和 Windows 7 上编译。

但是,在 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
  • 咕噜声

您可以查看完整的源代码@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并没有给我留下好印象,也许我应该看一个更可靠的播放库。但是,如果它只是开始播放,我会很高兴。

4

1 回答 1

1

使用DLL Export Viewer 查看您的.exe是否引用了正确的.dll

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

此外,请确保selectedFile具有文件的完整路径。在以下情况下检查路径是否有效是个好主意:

selectedFile = fileDialog.getSelectedPath();

和:

QFile file( selectedFile );
if( !file.exists() )
{
  qDebug() << "!!! Invalid file: " << selectedFile;
  return;
}
于 2013-03-01T23:37:23.327 回答