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

63 篇文章 9 订阅

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

.h文件


#ifndef INFACETEST_H
#define INFACETEST_H

#include <QMainWindow>
#include <QComboBox>
#include <QProcess>
#include "envconfig.h"
#include <QCoreApplication>
#include <QtWebKitWidgets/QWebView>
#include <QDir>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QMessageBox>
#include <QtCore>
#include <QChar>
#include <QLabel>
#include <QMessageBox>
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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GLL_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值