QT调用外部应用程序,主程序进行关闭时,无法关闭进程,即process无法进行close(),下面为调试源码,请指导!

不忘记的回忆 2016-11-28 02:07:39
我想通过选择名称来调用相应的外部应用程序,实现: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);
}

...全文
1080 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhgaven 2016-11-30
  • 打赏
  • 举报
回复
你不是做了判断了吗,QProcess *process = new QProcess();写错了吧,应该是赋值给成员变量吧
Little柯南 2016-11-30
  • 打赏
  • 举报
回复
引用 4 楼 u010695668 的回复:
那如何知道开启应用程序的状态呢,比如开启情况下,不能重复打开调用程序。
设置个button,按下后调用,然后按妞灰了,不就不能调用了?
不忘记的回忆 2016-11-30
  • 打赏
  • 举报
回复
那如何知道开启应用程序的状态呢,比如开启情况下,不能重复打开调用程序。
yhgaven 2016-11-29
  • 打赏
  • 举报
回复
这网络居然发了两次。。。。
yhgaven 2016-11-29
  • 打赏
  • 举报
回复
process->kill();
yhgaven 2016-11-29
  • 打赏
  • 举报
回复
process->kill();

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧