如图,进度条是用qslide控件:
用法:
QSlider *playSlider = new QSlider;
playSlider ->setRange(0,100); //设置进度条最小值和最大值(取值范围)
playSlider ->setMinimum(0); //设置进度条最小值
playSlider ->setMaximum(100); //设置进度条最大值
playSlider ->setValue(50); //设置当前的运行值
playSlider ->reset(); //让进度条重新回到开始
playSlider ->setOrientation(Qt::Horizontal); //水平方向
playSlider ->setOrientation(Qt::Vertical); //垂直方向
playSlider ->setAlignment(Qt::AlignVCenter); // 对齐方式
playSlider ->setTextVisible(false); //隐藏进度条文本
playSlider ->setFixedSize(258,5); //进度条固定大小
playSlider ->setInvertedAppearance(true); //true:反方向 false:正方向
playSlider ->setVisible(false); //false:隐藏进度条 true:显示进度条
void Thread_playbra::run()
{
QSlider *playSlider = new QSlider;
playSlider->setOrientation(Qt::Horizontal);
playSlider->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
playSlider->setFixedSize(640,10);//长和宽控制
playSlider->setRange(0,(int)times);
playSlider->setValue(0);
playSlider->setSingleStep(1);
// playSlider->setTickPosition(QSlider::TicksAbove); //刻度在上方
playSlider->setVisible(true);
sleep(1);
float final_time;
while(1)
{
//get_master_clock(is)获取当前播放进度,刷新进度条
final_time = get_master_clock(is);
playSlider->setValue((int)final_time);
playSlider->setVisible(false);
playSlider->setVisible(true);
// printf("total:%f - %f - %f - %f\n",times,final_time,get_audio_clock(is),get_video_clock(is));
// fflush(stdout);
usleep(100000);//每0.1秒刷新一次进度条
if(final_time >= times)
{
playSlider->setValue((int)final_time);
final_time = times;
break;
}
}
}
下面是使用QProgressBar实现,两个用法基本一致。
void Thread_playbra::run()
{
QProgressBar *playProBra = new QProgressBar;
playProBra->resize(400,400);
// playProBra->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
playProBra->setOrientation(Qt::Horizontal);
playProBra->setRange(0,31);
playProBra->setValue(0);
// playProBra->setFormat(tr("text"));
playProBra->setFixedSize(640,10);
playProBra->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
playProBra->setVisible(true);
sleep(1);
float final_time;
while(true)
{
usleep(100000);
//times
final_time = get_master_clock(is);
playProBra->setValue((int)final_time);
playProBra->setFormat(tr("%1%").arg(QString::number(final_time,'f',1)));
printf("total:%f - %f - %f - %f\n",times,final_time,get_audio_clock(is),get_video_clock(is));
fflush(stdout);
if(final_time >= times)
{
playProBra->setValue(final_time);
final_time = times;
break;
}
}
}