C++ QMediaPlayer:发出positionChanged()时声音中断

C++ QMediaPlayer:发出positionChanged()时声音中断,c++,qt,qmediaplayer,C++,Qt,Qmediaplayer,我也有同样的问题,比如 我使用QMediayPlayer,每当发出信号positionChanged()来更新我的滑块位置,并且我为滑块设置了一个新值时,声音就会中断片刻 这在构造函数中: soundfile = new QMediaPlayer(this, QMediaPlayer::LowLatency); //soundfile is a pointer of a QMediaPlayer Object QObject::connect(soundfile, SIGNAL(positio

我也有同样的问题,比如

我使用QMediayPlayer,每当发出信号positionChanged()来更新我的滑块位置,并且我为滑块设置了一个新值时,声音就会中断片刻

这在构造函数中:

soundfile = new QMediaPlayer(this, QMediaPlayer::LowLatency); //soundfile is a pointer of a QMediaPlayer Object

QObject::connect(soundfile, SIGNAL(positionChanged(qint64)), this, SLOT(changedPosition(qint64)));
这是插槽功能:

void Soundfile::changedPosition(qint64 p) {
    QTime time(0,0,0,0);
    time = time.addMSecs(soundfile->position());

    if(p != 0) recordSlider->setValue(p); //THIS IS THE LINE, WHERE IT INTERRUPTS
    changeRecordTime(QString::number(p));
    recordPositionLabel->setText("Aktuelle Zeit: " + time.toString());
}
recordSlider是一个QSlider。 如果我用setValue注释掉这行,一切正常


有人有主意吗?

我认为问题在于:当媒体播放器发出
信号时,调用
插槽
,当您在函数中使用
setValue
时,
setValue
再次发出
信号,该过程再次发生

为了解决这个问题,我禁用了滑块跟踪,并使用
setSliderPosition
移动位置

例如:

slider->setTracking(false);
slider->setSliderPosition(pos);

我认为这将有助于查看一些代码,最重要的是,我希望看到您创建QMediaPlayer并将其与消息和slots连接的代码部分。我添加了您希望查看的代码行。您是否没有其他涉及声音文件的Qobject::connect?特别是将声音文件作为目标对象?感谢Marco的帮助,user2014561解决了这个问题。我用两个QObject::connect连接了滑块和声音文件,其中一个就是您在代码中看到的。另一个是,当滑块的位置改变时,就会调用QMediayPlayer的setPosition。这导致循环中断。不客气,如果答案有效,请不要忘记加1。非常感谢,就这样!