这个是改进后的,之前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