QMediaPlayer在QtCreator外部启动时未在Windows上启动播放

QMediaPlayer not starting playback on Windows when started outside QtCreator

本文关键字:启动 Windows 播放 外部 QMediaPlayer QtCreator      更新时间:2023-10-16

我想适应Qt5,所以我启动了一个非常小的mp3播放器。它在Linux和Windows7上编译,都是64位的。

然而,当在Windows上运行时,只有当我在QtCreator中启动程序时,选定的mp3文件才会开始播放。当我启动独立的(共享编译的(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 的目录内容

  • 文件夹"platforms",包括: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、QT5 Widgets.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的好印象,也许我应该寻找一个更可靠的播放库。然而,如果它能开始播放,我会很高兴。

使用DLL导出查看器查看您的.exe是否指向右侧.dlls.

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

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

selectedFile = fileDialog.getSelectedPath();

带有:

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