您的位置:首页 > 编程语言 > Qt开发

Qt中使用QProcess启动外部程序和关闭外部程序

2018-03-30 12:31 1671 查看
   因为目前的程序需要提供一个文件对比的功能,而目前已经有专门的文本对比软件,所以我打算直接调用外部的文本对比程序。通过查阅QT的帮助文档,发现了QProcess这个类可以提供这种需求。
1、start()    void QProcess::start ( const  & program, const  & arguments,  mode = ReadWrite )        Starts the program program in a new process, passing the command line arguments in arguments. The  is set to mode.  will immediately enter the Starting state. If the process starts successfully, will emit (); otherwise, () will be emitted.  Note that arguments that contain spaces are not passed to the process as separate arguments.    Windows: Arguments that contain spaces are wrapped in quotes.
4000
Note: Processes are started asynchronously, which means the () and () signals may be delayed. Call () to make sure the process has started (or has failed to start) and those signals have been emitted.
2、使用QProcess::execute(),     不过使用此方法时程序会最阻塞直到此方法执行的程序结束后返回,这时候可使用QProcess和QThread这两个类结合使用的方法来处理,以防止在主 线程中调用而导致阻塞的情况    先从QThread继承一个类,重新实现run()函数:
Quote:
class MyThread : public QThread
{
public:
void run();
};
void MyThread::run()
{
QProcess::execute("notepad.exe");
}
      这样,在使用的时候则可定义一个MyThread类型的成员变量,使用时调用其start()方法:Quote:
class ...............
{...........
MyThread thread;
............
};
.....................
thread.start();
     在主程序退出时,启动的外部程序是不会随着主程序的退出而退出的,我们当然不希望这种情况。
继续查阅QT帮助文档,发现close这个函数,看下它的说明:
     void QProcess::close ()   [virtual]     Closes all communication with the process and kills it. After calling this function,  will no longer emit (), and data can no longer be read or written.    可以看到,调用这个后会关闭所有的process启动的外部程序。因此,可以在主程序推出前,加一个判断
[cpp] view plain copyif(process)   
process->close();  
delete process;  
process = 0;  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: