我正在使用qt5.0。我创建了DLL并将所有音频文件放在dll中。现在我正在从资源和播放创建文件。它工作正常。
但问题是在播放文件后我无法删除该文件并重新创建新文件。
如果我尝试手动删除,我也会收到错误。 “使用该文件的其他一些程序”。一旦我停止程序,那么只能删除该文件。
如何在立即palyback后删除文件。这是我的代码
player = new QMediaPlayer;
connect(player,SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),this,SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus)));
QFile file2(QDir::tempPath() + "/temp0.mp3");
if (file2.open(QIODevice::ReadWrite))
{
QFile workFile(":/AUDIO/" + fn +".mp3");
if(workFile.open(QIODevice::ReadOnly))
{
file2.write(workFile.readAll());
workFile.close();
}
file2.close();
}
player->setMedia(QMediaContent(QUrl::fromLocalFile(QDir::tempPath() + "/temp0.mp3")));
player->setVolume(100);
player->play();
void Audio::mediaStatusChanged(QMediaPlayer::MediaStatus state)
{
if(state==QMediaPlayer::EndOfMedia)
{
QFile::remove(QDir::tempPath() + "/temp0.mp3");
qDebug()<<"Audio played";
}
}
我收到了“音频播放”消息,但它没有删除该文件。
请帮我解决这个问题。
答案 0 :(得分:4)
最近,我遇到了同样的问题。 我通过将编译器从msvs更改为mingw来解决它。 我认为Qt的人没有解决这个问题,因为它的状态是“需要更多信息”。发布媒体文件的代码如下:
player->setMedia(QMediaContent());
但是,如果我使用mingw编译器,则视频不会在VM win7 x86中播放并报告DirectShowPlayerService::doRender: Unresolved error code 80040266
。这对我来说似乎是一个僵局。
答案 1 :(得分:1)
docs告诉我们QMediaPlayer :: setMedia:
将此属性设置为空QMediaContent将导致播放器 丢弃与当前媒体源有关的所有信息 停止与该媒体相关的所有I / O操作。
不幸的是,这在使用Qt 5.1.1的Windows 7上不起作用 - 这就是我提交bug report
的原因即便是Qt irc频道的人都告诉我不要在Windows上使用QMediaPlayer。他们建议使用SDL。对于具有多媒体API的跨平台框架,有点奇怪。