需要在启动时从Qt GUI内部退出进程 我试图运行在SBC68 45内的C++可执行文件[in /fTest],如图所示。现在这些可执行文件正在运行 while(1){ // around 250-300 lines of code here }

需要在启动时从Qt GUI内部退出进程 我试图运行在SBC68 45内的C++可执行文件[in /fTest],如图所示。现在这些可执行文件正在运行 while(1){ // around 250-300 lines of code here },qt,qprocess,qtembedded,Qt,Qprocess,Qtembedded,无限循环。现在,当我只运行终端的代码时,我可以随时杀死它们。但我无法在gui内部运行时杀死它们。我使用Qprocess执行这些代码,如下所示: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); connect(ui->pushButton, SIGNAL(pressed()), SLOT(vcm_test())); con

无限循环。现在,当我只运行终端的代码时,我可以随时杀死它们。但我无法在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 \r\n");
}
void MainWindow::offloader_test(){
    QProcess::execute("/ftest/off_test_2 \r\n");
}  
void MainWindow::quit_vcm(){
    QProcess::execute("\x001a \r\n");
} 
void MainWindow::quit_offloader(){
    QProcess::execute("\x001a \r\n");   
}
现在的问题是,当调用按钮按钮
vcm_test()
offloader_test()
时,gui将变得无响应。因为gui一直在等待/ftest中的代码完成,所以退出选项不起作用,我必须再次从终端退出它。从终端退出也会关闭代码和gui

我也尝试过搜索解决方案和使用线程。但我在从按钮启动线程时出现分段错误


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

您可以创建一个QProcess对象并对其调用start()。这样,在执行流程直到完成之前,代码不会被阻塞

QProcess* myprocess=new QProcess();
myprocess->start("/ftest/vcm_test_2");
如果您想从myprocess获得信号,就可以知道该进程是否已完成。这对你来说是没有用的。 您还可以通过调用

myprocess->close();
希望能有所帮助。

等待过程完成,这就是为什么您的GUI冻结的原因。改用。要退出进程,请使用函数

试试这个:

QProcess *myProcess = new QProcess(this);
myProcess->start("/ftest/vcm_test_2");
当您想要关闭流程时:

myProcess->close();
您还可以将按钮的点击信号连接到进程“终止槽:

connect(ui->pushButton_3, SIGNAL(clicked()), myProcess, SLOT(kill());

当我将myProcess->start()放入时,我遇到了分段错误;在vcm_test()内部,通过按钮调用它。有什么建议吗?@truestorybro您可以启动任何流程,还是总是导致分段错误?您是否初始化了流程?(myProcess=new QProcess(this))?实际上我在初始化过程中犯了一个错误。它工作正常,尽管现在终端上没有显示可执行文件的输出。当我按下按钮时,我可以看到卸载机实际移动,我可以知道它正在工作。谢谢。@truestorybro如果要打印输出,可以使用QProcess的信号并将其连接到插槽,在插槽中打印内容。您也可以在其自己的窗口中使用该函数启动该进程。好的,如果我想将相同的输出(通过/dev/ttyUSB0显示到普通终端)显示到可执行文件的QTextEdit(通过/dev/tty0连接的触摸屏)中,我需要什么函数。