由于要做播放器的类似功能,要更新slider以及播放时间,写了以下四个槽函数,运行后发现,播放的音乐一卡一卡的,找了好久也没找到原因,重写了一遍,发现这四个槽函数一加播放就会卡顿
void player_stateChange(QMediaPlayer::State state);
{
switch(state)
{
case QMediaPlayer::StoppedState:
case QMediaPlayer::PausedState:
ui->playAndStopButton->setChecked(false);
break;
case QMediaPlayer::PlayingState:
ui->playAndStopButton->setChecked(true);
break;
}
}
}
void player_positionChanged(qint64 position)
if(ui->musicProgressSlider->isSliderDown())
return;
ui->musicProgressSlider->setSliderPosition(position);
int second = position/1000;
int minute = second/60;
second = second%60;
QString secondStr;
QString minuteStr;
if(minute<10)
{
minuteStr = QString::asprintf("0%d" ,minute);
}
if(second<10)
{
secondStr = QString::asprintf("0%d" ,second);
}
QString positionTime = QString(minuteStr+":"+secondStr);
ui->playedTimeLabel->setText(positionTime);
void player_durationChange(qint64 duration);
ui->musicProgressSlider->setMaximum(duration);
int second = duration/1000;
int minute = second/60;
second = second%60;
QString secondStr;
QString minuteStr;
if(minute<10)
{
minuteStr = QString::asprintf("0%d" ,minute);
}
if(second<10)
{
secondStr = QString::asprintf("0%d" ,second);
}
QString durationTime = QString(minuteStr+":"+secondStr);
ui->durationTimeLabel->setText(durationTime);
void playlist_indexChange(int index);
void on_musicProgressSlider_valueChanged(int value);
m_player->setPosition(value);
找了有很久,发现如果不使用ui设计界面创建控件,而使用代码创建,不会出现卡顿,本人采用此方法,setParent,setGeometry,放到正确的位置,再次运行,发现播放不再卡顿