ffmpeg QT实现播放器的进度条

在这里插入图片描述
如图,进度条是用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;
        }
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值