QT调用外部应用程序,主程序进行关闭时,无法关闭进程,即process无法进行close(),下面为调试源码,请指导!
我想通过选择名称来调用相应的外部应用程序,实现:1.主登陆界面关闭时,调用的程序一起关闭, 2.调用的程序关闭时,主登陆界面还在,3.调用的程序关闭时,主登陆程序能够知道调用的程序已关闭,可以进行重新调用程序 4.调试时出现,主登陆界面程序进行退出关闭时,我想结束开启的进程, 但是process->close()这句话无法进行,会提示应用程序出错。附件为源码,求大神指导!
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QTextStream>
#include <QTimer>
#include <QMessageBox>
#include <QSettings>
#include"QDateTime"
#include"QDateTimeEdit"
#include<qDebug>
#include <QInputDialog>
#include <QProcess>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("Hietech Test-Software");
process=0;
connect(pushButton_load, SIGNAL(clicked()), this, SLOT(startProcess()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::startProcess()
{
if(process==0)
{
QProcess *process = new QProcess();
QString text=ui->comboBox_model->currentText();//获取选择的应用程序
QString path;
QDir dir;
QStringList str;
str <<"";
path=dir.currentPath();
path+= "/EFM5100/"+text+".exe"; //5100文件夹下的
process->start(path,str);
QObject::connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError (QProcess::ProcessError)));
}
else
{
QMessageBox::information(0,"Process","已有进程在运行");
return;
}
}
void MainWindow::processError(QProcess::ProcessError error)
{
qDebug()<<error;
switch(error)
{
case QProcess::FailedToStart:
QMessageBox::information(0,"FailedToStart","FailedToStart");
break;
case QProcess::Crashed:
QMessageBox::information(0,"Crashed","Crashed");
break;
case QProcess::Timedout:
QMessageBox::information(0,"FailedToStart","FailedToStart");
break;
case QProcess::WriteError:
QMessageBox::information(0,"Timedout","Timedout");
break;
case QProcess::ReadError:
QMessageBox::information(0,"ReadError","ReadError");
break;
case QProcess::UnknownError:
QMessageBox::information(0,"UnknownError","UnknownError");
break;
default:
QMessageBox::information(0,"default","default");
break;
}
}
void MainWindow::on_pushButton_load_clicked()
{
startProcess();
}
void MainWindow::on_pushButtonexit_clicked()
{
QMessageBox::StandardButton button=QMessageBox::question(this, "退出", "确认退出?");
if(button==QMessageBox::No)
{
return;
}
if(process)
{
process->close(); //。。。。这里会出错。。。。
delete process;
process=0;
}
qApp->exit(0);
}