由于项目需要使用ffmpeg进行实现图片合成视频,本来打算使用c++版本的ffmpeg代码进行实现,奈何代码看都看不懂,时间赶的紧,于是决定直接调用控制台版本的,代码如下,非常简单:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QTime>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    ui->setupUi(this);
    QTime time;
       time.start();
      po = new QProcess(this);
//处理完成事件
    connect(po,SIGNAL(readyRead()),this,SLOT(handle_ok()));
 //读取控制台输出
    connect(po , SIGNAL(readyReadStandardOutput()) , this , SLOT(on_readoutput()));
    //读取控制台输出错误
    connect(po , SIGNAL(readyReadStandardError()) , this , SLOT(on_readerror()));
//开始运行事件
    connect(po,SIGNAL(started()),SLOT(handle_start()));
      QString input_path = "/home/wenshuai/桌面/out/%12d.jpg";
      QString output_path="/home/wenshuai/桌面/test.flv";
      QString threads="1";
      QString rate="25";
        QString program = "ffmpeg";
        QStringList argu;
        argu.append("-y");
        argu.append("-r");
        argu.append(rate);
        argu.append("-threads");
        argu.append(threads);
        argu.append("-i");
        argu.append(input_path);
        argu.append("-vcodec");
        argu.append("libx264");
        argu.append(output_path);
        po->start(program,argu);
        po->waitForFinished(-1);
            qDebug() << "Using " << time.elapsed();
void MainWindow::handle_ok()
    qDebug()<<"start";
void MainWindow::on_readoutput()
   //ui->textEdit->append(po->readAllStandardOutput().data());   //将输出信息读取到编辑框
void MainWindow::on_readerror()
   ui->textEdit->setText(po->readAllStandardError().data());    //弹出信息框提示错误信息
void MainWindow::handle_start()
    qDebug()<<"handle start";
MainWindow::~MainWindow()
    delete ui;

启动外部程序使用的是start函数,当我们使用这个函数之后,外部的进程启动,程序开始运行,这时候它和调用它的线程(一般是我们的GUI线程)之间就分离了,二者再无任何关系,即使这时候关闭了我们的程序,外部的程序还是会自己运行直到处理任务结束。有时候这并不是我们需要的,我们想让主线程等待这个处理工具处理结束,这个时候可以在start之后调用一个等待的函数:

bool QProcess::waitForFinished(int msecs = 30000)

这里面msecs函数是等待结束的时间(单位是毫秒),如果设置为-1,那么启用外部程序的这个线程会等待外部工具运行完成。这个时候如果是GUI线程,那么画面会假死。

bool QProcess::waitForFinished(-1)
                    由于项目需要使用ffmpeg进行实现图片合成视频,本来打算使用c++版本的ffmpeg代码进行实现,奈何代码看都看不懂,时间赶的紧,于是决定直接调用控制台版本的,代码如下,非常简单://记录执行的时间 QTime time;       time.start();       //初始化process对象      po = new QProcess(this);//绑定命令开始执行...
QT窗体程序的调试信息无法直接看到,通过一定的方法可以把qDebug、cout出来的信息在单独的控制台界面显示出来。显示的效果如下:背后是控制台界面,可以显示调试信息;前面是窗体程序。
1、在pro文件中加入一句 CONFIG +=console
2、qDebug()的输出信息可以直接在console界面显示了;若想采用cout的方式输出显示,可以有两种方式。
//方式一
 #i...
  ----SW_MAXIMIZE 最大化
  ----SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活
  ----SW_RESTORE 激活窗口并还原为初始化大小 SW_SHOW 以当前大小和状态激活窗口
  ----SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动
				
arping,用来向局域网内的其它主机发送ARP请求的指令,它可以用来测试局域网内的某个IP是否已被使用。 指令格式如下:arping [-AbDfhqUV] [-c count] [-w deadline] [-s source] -I interface destination参数释意: -A:与-U参数类似,但是使用的是ARP REPLY包而非ARP REQUEST包。 -b:发送以太网
1110 1100(EC)为负数,后7位的值为6c,即616+12=108,128-108=20,此数为-20 1111 1111(FF)为负数,后7位的值为7f,即716+15=127,128-127=1,数为-1 1100 1110(CE)为负数,后7位的值为4e,即416+14=78,1