QT中的多进程 QProcess

  温故知新:
                linux中的多进程  fork()
                                          system()/exec函数族
   1.常用方法
         (1)创建进程对象
                        QProcess::QProcess(QObject *parent = nullptr)
         (2)启动进程去执行另外一个程序
                       void QProcess::start(const QString &command)  //类似于system()/exec函数族
                                    参数:command --》你要执行的另外一个程序的路径名
         (3)杀死进程
                      void QProcess::kill()
         (4)等待回收进程
                     bool QProcess::waitForFinished(int msecs = 30000)
                                     参数:超时时间
        (5)获取当前进程的运行状态
                    QProcess::ProcessState QProcess::state() const
                                    返回值:QProcess::NotRunning   --》进程还没有运行
                                                 QProcess::Starting          --》进程处于就绪态
                                                 QProcess::Running         --》进程处于执行态

   2.举例使用多进程
            例子一:创建一个进程,去调用执行window的画图程序,以及计算器程序
            例子二:创建进程,使用mplayer播放器去播放视频                 
                 windows版本的mplayer播放命令
                               mplayer绝对路径  -slave -quiet -wid   窗口id号   视频路径
                                 
                 ARM版本的mplayer播放命令
                      mplayer -slave -quiet -geometry 50:50 -zoom -x 400 -y 350   视频的路径
                               参数: -geometry  --》指定播放的位置坐标
                                      -x  指定视频播放的宽
                                      -y  指定视频播放的高
                把彭老师给的ARM版本的mplayer下载到开发板的/bin,然后修改权限为777就可以使用了

 

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //初始化进程对象
    pro=new QProcess(this);
}

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

//播放视频
void MainWindow::on_playbt_clicked()
{
    //拼接得到完整的播放命令
    QString cmd=QString("C:/mplayer/mplayer.exe -slave -quiet -wid %1 D:/GZ2162文件/GZ2162上课视频/C++/12月9上午讲解构造函数,析构函数.mp4").arg(ui->label->winId());
    //通过进程去调用执行mplayer播放视频
    pro->start(cmd);
}
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //初始化进程对象
    pro=new QProcess(this);
}

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

//启动画图程序
void MainWindow::on_pushButton_clicked()
{
    pro->start("mspaint");
}
//启动计算器程序
void MainWindow::on_pushButton_2_clicked()
{
    pro->start("calc");
}

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //初始化进程对象
    pro=new QProcess(this);

    //把上课的视频加载到横向列表框中
    QDir mydir("D:/GZ2162文件/GZ2162上课视频/C++");
    QStringList mylist=mydir.entryList();
    for(int i=0; i<mylist.size(); i++)
    {
        //拼接得到绝对路径
        QString allpath=QString("D:/GZ2162文件/GZ2162上课视频/C++/%1").arg(mylist.at(i));
        //判断文件是不是mp4或者avi格式的视频
        QFileInfo fileinfo(allpath);
        QString str=fileinfo.suffix(); //获取文件的后缀名
        if(str=="mp4" || str=="avi")
             //添加到横向列表框中
             ui->listWidget->addItem(allpath);
    }

}

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

//单击列表项
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    videopath=item->text(); //保存了列表项的文本内容
    currow=ui->listWidget->currentRow(); //保存了当前列表项的索引
}
//播放视频
void MainWindow::on_playbt_clicked()
{
    //拼接得到完整的播放命令
    QString cmd=QString("C:/mplayer/mplayer.exe -slave -quiet -wid %1 %2").arg(ui->label->winId()).arg(videopath);

    //判断mplayer是不是正在播放其它的视频
    if(pro->state()==QProcess::Running) //进程正在运行mplayer播放
    {
        //杀死
        pro->kill();
        //顺便回收
        pro->waitForFinished();
    }
    //再去播放目前点击的那个视频
    pro->start(cmd);
}
//退出播放
void MainWindow::on_quitbt_clicked()
{
    if(pro->state()==QProcess::Running) //进程正在运行mplayer播放
    {
        //杀死
        pro->kill();
        //顺便回收
        pro->waitForFinished();
    }
}
//下一首
void MainWindow::on_nextbt_clicked()
{
    if(currow<(ui->listWidget->count()-1))
        currow++; //跳到下一首的索引位置
    else
        currow=0;

    //通过这个索引得到下一首的路径名
    QString nextstr=ui->listWidget->item(currow)->text();
    //拼接得到完整的播放命令
    QString cmd=QString("C:/mplayer/mplayer.exe -slave -quiet -wid %1 %2").arg(ui->label->winId()).arg(nextstr);

    //判断mplayer是不是正在播放其它的视频
    if(pro->state()==QProcess::Running) //进程正在运行mplayer播放
    {
        //杀死
        pro->kill();
        //顺便回收
        pro->waitForFinished();
    }
    //再去播放目前点击的那个视频
    pro->start(cmd);
    //把列表框的当前位置更新
    ui->listWidget->setCurrentRow(currow);
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hqb_newfarmer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值