qt - 需要从 Qt GUI中退出一个进程,就像它启动时一样

  显示原文与译文双语对照的内容
54 1

我正在尝试运行位于 SBC6845 [inside/ftest as shown ] 内的C++ 可执行文件。现在这些可执行文件正在运行

while(1){
//around 250-300 lines of code here
}

无限循环。现在只要在终端运行代码,我就可以在需要时杀死它们。但是我不能在从gui内部运行时杀死它们。我像这样用Qprocess执行这些代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow){
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(pressed()), SLOT(vcm_test()));
connect(ui->pushButton_2, SIGNAL(pressed()), SLOT(offloader_test()));
connect(ui->pushButton_3, SIGNAL(pressed()), SLOT(quit_vcm()));
connect(ui->pushButton_4, SIGNAL(pressed()), SLOT(quit_offloader()));}
void MainWindow::vcm_test(){
 QProcess::execute("/ftest/vcm_test_2 rn");
}
void MainWindow::offloader_test(){
 QProcess::execute("/ftest/off_test_2 rn");
} 
void MainWindow::quit_vcm(){
 QProcess::execute("x001a rn");
} 
void MainWindow::quit_offloader(){
 QProcess::execute("x001a rn"); 
}

现在问题是,当invoked按钮或者 pushbutton_2 换句话说,vcm_test() 或者 offloader_test() 被调用时,gui就变得无React了。因为gui一直等待/ftest 中的代码完成退出选项,所以我不得不再次从终端退出它。同时退出终端同时关闭代码和 gui 。

我已经尝试搜索解决方案和使用线程。但是,当从按钮启动一个线程时,我得到了分段错误。

我需要能够在执行( 修改这里代码或者任何新想法非常感谢) 时退出进程。我是一个新手,请忽略我的糟糕的编码技能。谢谢。

时间: 原作者:

59 4

QProcess::execute(..) 等待进程完成,这就是为什么你的GUI是冻结的。使用 QProcess::start(..)要退出进程,请使用 QProcess::close() 函数

尝试这个:

QProcess *myProcess = new QProcess(this);
myProcess->start("/ftest/vcm_test_2");

当你想关闭进程时:

myProcess->close();

你还可以将单击的按钮信号连接到进程'kill:

connect(ui->pushButton_3, SIGNAL(clicked()), myProcess, SLOT(kill());
原作者:
146 5

你可以创建一个QProcess对象并在它上面调用 start() 。这样代码在执行过程中不会被阻塞,直到完成。

QProcess* myprocess=new QProcess();
myprocess->start("/ftest/vcm_test_2");

如果你想获得myprocess的信号以了解该进程是否已经完成,你可以。在你的情况下。你还可以通过调用

myprocess->close();

希望 helpes 。

...