二、事件与线程类问题
2026/8/6小于 1 分钟
二、事件与线程类问题
5. 定时器里清除列表会打断当前播放
现象:使用定时器定时刷新音乐列表,结果每次刷新时正在播放的音乐突然中断。
原因:清空 QListWidget 或 QMediaPlaylist 时,如果当前有歌曲在播放,播放器会失去当前播放项。
解决:刷新列表前先保存当前播放状态,刷新完成后恢复。
void refreshPlaylist() {
// 保存当前播放索引
int currentIndex = m_playlist->currentIndex();
bool wasPlaying = (m_player->state() == QMediaPlayer::PlayingState);
// 清空并重新加载列表
ui->listWidget->clear();
m_playlist->clear();
// ... 重新扫描文件 ...
// 恢复播放状态
if (currentIndex >= 0 && currentIndex < m_playlist->mediaCount()) {
m_playlist->setCurrentIndex(currentIndex);
if (wasPlaying) {
m_player->play();
}
}
}经验:任何对播放列表的修改操作,都要考虑对当前播放状态的影响。

