linux QT利用进程调用脚本并等待进程结束后往后正常执行--改进

这个是改进后的,之前waitForFinished()阻塞有点问题,这个是获取结束进程的退出状态后执行

.h文件


#ifndef INFACETEST_H
#define INFACETEST_H

#include 
#include 
#include 
#include "envconfig.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
namespace Ui {
class Infacetest;
}

class Infacetest : public QMainWindow
{
    Q_OBJECT

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

    QLabel d;

    Envconfig  *env1;
    QProcess *proc_left;
    QProcess *proc_right;
    QProcess *proc_mix;
    QProcess *proc_record_start;
    QProcess *proc_record_stop;
    QString root_passwd; //接收从登陆窗口传进来的root密码
//    void change_pBtn(void);
    void handle_envsig(void);
    void loadData(QString path,QString name,QStandardItemModel *goodsModel);

private slots:
    void on_pBtn_envconfig_clicked();
    // /*音频接口
    void on_pBtn_left_clicked();

    void on_pBtn_right_clicked();

    void on_pBtn_mix_clicked();

    void on_pBtn_microphone_clicked();
    // 音频接口 */
    void  handle_mix(void);
    void finished_mix(int exitCode,QProcess::ExitStatus exitstatus);
    void finished_left(int exitCode,QProcess::ExitStatus exitstatus);
    void finished_right(int exitCode,QProcess::ExitStatus exitstatus);
    void on_pBtn_microphone_stop_clicked();
    void on_action1_7_triggered();

    void on_pBtn_confirm_clicked();

private:
    Ui::Infacetest *ui;
};

#endif // INFACETEST_H

.cpp文件

#include "infacetest.h"
#include "ui_infacetest.h"
#
Infacetest::Infacetest(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Infacetest)
{
    ui->setupUi(this);



    proc_left = new QProcess;
    proc_right = new QProcess;
    proc_mix = new QProcess;
    proc_record_start = new QProcess;
    proc_record_stop = new QProcess;



   // connect(ui->cBx_scanMode,&QComboBox::currentTextChanged,this,&Infacetest::change_pBtn);
    connect(env1,&Envconfig::env_signal,this,&Infacetest::handle_envsig);
    connect(proc_mix,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(finished_mix(int,QProcess::ExitStatus)));
    connect(proc_left,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(finished_left(int,QProcess::ExitStatus)));
    connect(proc_right,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(finished_right(int,QProcess::ExitStatus)));
}
void Infacetest::on_pBtn_left_clicked()
{
    ui->pBtn_left->setEnabled(false);
    ui->pBtn_left->setText("正在测试");
//    proc_left->start("mplayer /diskE/audiotest/left.mp3 -af volume=15");  //mp3的地址为绝对地址
//    proc_left->start("firefox");  //ok
    proc_left->start("sh "+ QCoreApplication::applicationDirPath() + "/mp3left.sh");
//    qDebug() << QCoreApplication::applicationDirPath();
//    QMessageBox::about(this,"About",QCoreApplication::applicationDirPath());
//    QProcess::execute("mplayer ./left.mp3 -af volume=15");


//    ui->pBtn_left->setEnabled(true);
}

void Infacetest::on_pBtn_right_clicked()
{
//    ui->pBtn_right->setEnabled(false);
    ui->pBtn_right->setEnabled(false);
    ui->pBtn_right->setText("正在测试");
//    proc_right->start("mplayer /diskE/audiotest/right.mp3 -af volume=15");

    proc_right->start("sh "+ QCoreApplication::applicationDirPath() +"/mp3right.sh" );

//    ui->pBtn_right->setEnabled(true);
}

void Infacetest::on_pBtn_mix_clicked()
{
    ui->pBtn_mix->setEnabled(false);

    ui->pBtn_mix->setText("正在测试");
//    proc_mix->start("mplayer /diskE/audiotest/mix.mp3 -af volume=15");
    proc_mix->start("sh "+ QCoreApplication::applicationDirPath() +"/mp3mix.sh");


}

void Infacetest::finished_mix(int exitCode, QProcess::ExitStatus exitstatus)
{
    ui->pBtn_mix->setEnabled(true);
    ui->pBtn_mix->setText("测试");
}

void Infacetest::finished_left(int exitCode, QProcess::ExitStatus exitstatus)
{
    ui->pBtn_left->setEnabled(true);
    ui->pBtn_left->setText("测试");
}

void Infacetest::finished_right(int exitCode, QProcess::ExitStatus exitstatus)
{
    ui->pBtn_right->setEnabled(true);
    ui->pBtn_right->setText("测试");
}


进程调用shell脚本获取退出状态详情请看

https://blog.csdn.net/wzj0808/article/details/79367314

 

你可能感兴趣的:(Linux,qt,linux,qt,shell调用)