QT简单播放视频窗口

一、要点

(1)创建一个Widget主窗体,名为test的类。QLabel作为播放框,QListWidget作为播放列表。一个暂停按钮。暂时没懂修改,无法实现进度条进度。只是实现了双击列表,循环播放视频,或者点击按钮,暂停/继续播放视频。

(2)在有关路径的语句中,如果要用相对路径,一定要注意把这里的√去掉,否则工作目录和文件目录不在一个文件,比较难找。如果勾选了Shadow Build,则构建过程中生成的中间文件和输出文件(工作目录)将默认存储在一个与源代码目录不同的位置。把√去掉的话,就可以用“./......”这种方式找到图片或视频文件。可以用以下语句打印出当前工作目录路径:

  QString currentPath = QDir::currentPath();
  qDebug()<<currentPath;

(3)给播放器发送暂停/播放指令时,我把换行符写反了。

 player->write("pause\n");能实现立马暂停

 player->write("pause/n");过几秒才暂停

以下是GPT的解释:

        第一句代码中,使用的是"\n"作为换行符,它会立即执行换行操作,然后执行暂停操作。第二句代码中,使用的是"/n"作为换行符,是一个无效的换行符,它不会立即执行换行操作,而是等待一段时间才会执行换行操作,然后再执行暂停操作。因此,导致了这两句代码的执行结果有区别。

还可以在发送指令之后加以下这句,保证命令被立即发送。

 player->waitForBytesWritten();

二、代码 

test.h

#ifndef TEST_H
#define TEST_H

#include <QWidget>
#include <QProcess>
#include <QListWidget>
#include <QListWidgetItem>
#include <QDir>

namespace Ui {
class test;
}

class test : public QWidget
{
    Q_OBJECT

public:
    explicit test(QWidget *parent = 0);
    ~test();

private slots:
    void on_vid_list_doubleClicked(const QModelIndex &index);
    void on_pause_bt_clicked();

private:
    Ui::test *ui;
    QProcess *player;
};

#endif // TEST_H

test.cpp

#include "test.h"
#include "ui_test.h"
#include <QDebug>

test::test(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::test)
{
    ui->setupUi(this);

    //QDir dir("/opt/xiaoyi/test/test/video/");
    QDir dir("./video/");
    if(!dir.exists())
        return;
    QStringList list,filters;
    filters<<"*.avi"<<"*.mp4";
    list = dir.entryList(filters);
    ui->vid_list->addItems(list);

    QIcon icon(":/new/prefix1/icon/video.png");
    for(int i = 0; i < list.size();i++)
    {
        ui->vid_list->item(i)->setIcon(icon);
    }
    player = new QProcess();

}

test::~test()
{
    delete ui;
}

void test::on_vid_list_doubleClicked(const QModelIndex &index)
{
    if(player->state() == QProcess::Running)
    {
        player->kill();
        player->waitForFinished(3000);
    }

    //qDebug()<<"index:"<<index.row();
    qDebug()<<"name:"<<ui->vid_list->item(index.row())->text();
    QString vPathName("./video/"+ui->vid_list->item(index.row())->text());
    //QString currentPath = QDir::currentPath();
    //qDebug()<<currentPath;
    //QString vPathName = currentPath + "/video/" + ui->vid_list->item(index.row())->text();
    QStringList list;
    list<<"-slave";
    list<<"-quiet";
    list<<"-wid";
    list<<QString::number(ui->show_lb->winId());
    list<<"-loop";
    list<<"0"; //设置循环播放次数,0表示无限循环
    list<<vPathName;
    player->start("/usr/bin/mplayer",list);

}

void test::on_pause_bt_clicked()
{
    if(player->state() == QProcess::Running)
    {
        player->write("pause\n");
        player->waitForBytesWritten();
    }
    else
    {
        player->write("pause\n");
        player->waitForBytesWritten();
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值