1.关闭gazebo服务
QProcess *RosCloseGzclient = new QProcess;
RosCloseGzclient->start("killall gzclient");
QProcess *RosCloseGzserver = new QProcess;
RosCloseGzserver->start("killall gzserver");
2.关闭roscore 和rosmaster
同理,只需要把qprocess里的start方法里的内容改为"killall roscore" "killall rosmaster"就行
一般命令行的命令比如roslaunch 等打开文件,是start(“bash”)然后用write方法写入命令,但是涉及到终止服务等则不能这样做(好像运行不了,鄙人在做项目时就是不能运行),得直接在start里写。
3.关闭ros节点
在命令行中我们可以通过"rosnode kill -a"结束所有的ros节点,既然命令行可以实现,那么在QProcess里也是可以实现的。
QProcess* ps2_end = new QProcess();
ps2_end->start("rosnode kill /arduino");
其中/arduino是要结束的进程,具体可以自己改。
最后对这些命令的对象赋空,(当然小项目中这一步有没有其实都无所谓就是)
process->kill();
process->close();
delete process;
process=nullptr;
我认为应该会存在一种方法去模拟ctrl+c的过程的,以此实现通解,ctrl+c的本质是发送了一个中断的信号,Qt可以模拟这个过程,但由于时间问题,这里没有继续深究,以后有时间的话会继续对博客进行更新。